6

我在这里发现了一个类似的问题: iOS 8 (Swift) How do I get rid of this error: ImageIO: PNG zlib error? 但是有一些区别。

PHAsset从选择器中获取 - 图像确实下载并正确显示(它使用PHCachingImageManager类)。

但是,当我稍后尝试从资产请求图像时,如下所示:

[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:AssetTargetSize
    contentMode:PHImageContentModeAspectFit options:nil 
    resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
        if (result)
            _image = result;
}

result变量是指向UIImage对象的指针,但无效 - 我无法将其转换为 NSData,也无法通过 xcode 快速查看。

在日志中,我只收到以下消息:仅此<Error>: ImageIO: PNG zlib error而已。

我尝试按照链接问题中的建议使请求同步,但这没有任何区别。

指向的图像PHAsset可以在照片应用程序和照片选择器中查看。

4

2 回答 2

0

我通过将上述同步选项设置为 true 以及在外部设置对 requestImageForAsset 的调用的大小来解决此问题。对我来说,两者都是必需的,它才能工作。在 Swift 2.x

    let aSize = CGFloat(200) // it's really a constant elsewhere in the project
    let targetSize = CGSizeMake(aSize, aSize)
    let options = PHImageRequestOptions()
    options.synchronous = true

    PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFit, options: options, resultHandler: { (image, info) -> Void in
        guard let imageFor = image else { return }
        // use (now-unwrapped) imageFor here
    })
于 2016-06-29T15:41:27.143 回答
0

我们需要启用同步选项。

PHAsset *asset = array[i];
            PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
             options.synchronous  = YES;
            PHImageManager *imageManager = [PHImageManager defaultManager];
            [imageManager requestImageForAsset:asset targetSize:CGSizeMake(200, 200) contentMode:PHImageContentModeAspectFit options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
                badge = (UIImage *)result;
            }];
于 2016-06-29T13:16:07.933 回答