4

我使用grabKit是为了允许用户将他们的Instagram、Facebook 和本地图片导入我的应用程序。当照片是本地的时,问题就来了。在这种情况下,我使用了一种在用户选择照片时有效的方法。

为此,我找到的标准代码如下:

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

    [popoverdismissPopoverAnimated:YES];

    GRKImage *originalImage = [照片原始图像];

    NSLog(@"第一张选中照片的原图URL为:%@", originalImage.URL );
    NSLog(@"这个图片的大小是: %dx %d ", originalImage.width, originalImage.height );

    // 如果 url 以 assets-library:// 开头
    if ( [[originalImage.URL absoluteString] hasPrefix:@"assets-library://"] ){

        // 实例化一个库
        ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];

        // 请求 URL 的“资产”。资产是照片应用程序中图像的表示。
        [库assetForURL:originalImage.URL
                 resultBlock:^(ALAsset *asset) {

                     // 在这里,我们有了资产,让我们从中检索图像
                     CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage];

                     // 从 CGImage,让我们构建一个 UIImage
                     UIImage * fullResImage = [UIImage imageWithCGImage:imgRef];

                     NSLog(@" URL %@ 的 UIImage 是 %@", originalImage.URL, fullResImage);

                 } failureBlock:^(NSError *error) {
                     // 发生了错误。
                 }];
}

通过进行一些调试,我发现当我尝试CGImageRefALAsset以下行中获取 ergo时,应用程序崩溃了CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage];

如果它可以帮助解决我的问题,我在控制台中收到的消息是:

*** 由于未捕获的异常“CALayerInvalidGeometry”而终止应用程序,原因:“CALayer 位置包含 NaN:[nan 653]”

*** 首先抛出调用堆栈:

(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:终止调用抛出异常

感谢您的时间和兴趣!

4

1 回答 1

2

通常是由于 CALayer 框架设置无效CALayerInvalidGeometryNAN导致的,而 CALayer 框架又可以通过view.frame. 可能某处图层位置/变换设置不正确。由于您没有直接执行此操作,因此它似乎是Grabkit. 在这里归档。

您可以考虑CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage];使用 F7 进入内部以提供有关崩溃的更多信息Grabkit

于 2013-07-24T05:53:21.510 回答