UIImage from GRKPhoto using ALAsset

与世无争的帅哥 提交于 2019-12-23 12:27:30

问题


I'm using grabKit in order to allow users to import their Instagram, Facebook and local pictures to my app. The problem comes when the photo is local. In this case, I use a method that works when the user selects the photo.

The standard code I found in order to do so is the following:

- (void)picker:(GRKPickerViewController*)picker didSelectPhoto:(GRKPhoto *)photo{

    [popover dismissPopoverAnimated:YES];

    GRKImage *originalImage = [photo originalImage];

    NSLog(@" the URL of the original image of the first selected photo is : %@", originalImage.URL );
    NSLog(@" the size of this image is : %d x %d ", originalImage.width, originalImage.height );

    // If the url begins with assets-library://
    if ( [[originalImage.URL absoluteString] hasPrefix:@"assets-library://"] ){

        // Instantiate a library
        ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];

        // Ask for the "Asset" for the URL. An asset is a representation of an image in the Photo application.
        [library assetForURL:originalImage.URL
                 resultBlock:^(ALAsset *asset) {

                     // Here, we have the asset, let's retrieve the image from it
                     CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage];

                     // From the CGImage, let's build an UIImage
                     UIImage * fullResImage = [UIImage imageWithCGImage:imgRef];

                     NSLog(@" The UIImage for URL %@ is %@", originalImage.URL, fullResImage);

                 } failureBlock:^(NSError *error) {
                     // Something wrong happened.
                 }];
}

By doing some debugging, I found that the app crashes when I try to get the CGImageRef from the ALAsset, ergo, in this line: CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage];.

If it can help to solve my issue, the message I get in the console is:

*** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 653]'

*** First throw call stack:

(0x42f8012 0x2ad9e7e 0x42f7deb 0x161ee0b 0x161efa5 0x161f6eb 0x174fe53 0x18191c0 0x181941a 0x21fad 0x219f1 0x13de70 0xf3c03 0x1c0f42f 0x1c21182 0x1c21394 0x2aed705 0x181b93c 0x181b9ac 0x2aed705 0x181b93c 0x181b9ac 0x19d51d3 0x42c0afe 0x42c0a3d 0x429e7c2 0x429df44 0x429de1b 0x3b9d7e3 0x3b9d668 0x170dffc 0x69432 0x30f5)

libc++abi.dylib: terminate called throwing an exception

Thanks for your time and interest!


回答1:


Usually CALayerInvalidGeometry and NAN results from invalid setting of CALayer frame, which in turn can be set by view.frame. It maybe that somewhere the layer position / transform is being set incorrectly. Since you are not doing this directly it seems to be a bug with Grabkit. File it here.

You can consider going inside CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage]; using F7 to provide more information about the crash to Grabkit.



来源:https://stackoverflow.com/questions/17530222/uiimage-from-grkphoto-using-alasset

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!