requestImageDataForAsset返回空的图像数据。

6

我已经被卡了几天。我一直在尝试在回调函数中获取图像,但我总是得到nil。这些是我使用的选项:

 let options = PHImageRequestOptions()
            options.deliveryMode = .HighQualityFormat
            options.resizeMode = .None

我曾经尝试将选项设置为nil,但没有成功。下面是我在传递给块的信息值中得到的数据。

[PHImageResultIsInCloudKey: 0, 
 PHImageResultDeliveredImageFormatKey: 9999, 
 PHImageFileURLKey: file:///var/mobile/Media/DCIM/100APPLE/IMG_0052.JPG, 
 PHImageResultRequestIDKey: 84, 
 PHImageResultIsDegradedKey: 0, 
 PHImageResultWantedImageFormatKey: 9999,  
 PHImageResultIsPlaceholderKey: 0, 
 PHImageFileSandboxExtensionTokenKey: 
  64b47b046511a340c57aa1e3e6e07994c1a13853;00000000;00000000;0000001a;com.apple.app-sandbox.read;;00000000;00000000;0000000000000000;/private/var/mobile/Media/DCIM/100APPLE/IMG_0051.JPG]

我还尝试使用requestImageForAsset,但结果相同。我想通过使用requestImageDataForAsset来更好地控制数据。
此外,我认为文件存在于云中,但实际上并非如此,因为PHImageResultIsInCloudKey的值设置为0;否则,我会下载它。
顺便说一下,在另一个视图中,我可以获得预定义大小为200x200的图像的较小版本;但是,当我尝试获取其较大版本时,返回值为空。我知道在手机上存在分辨率更高的图像(我可以在照片应用中看到它)。
将不胜感激任何帮助。
2个回答

5

我曾经遇到过类似的问题,并尝试将PHImageRequestOptions对象上的networkAccessAllowed选项设置为YES,这似乎解决了问题。对我来说,问题肯定是那些在云端的图片无法正常工作,而在相机胶卷中的图片可以正常工作。


0

我有同样的问题。我认为PHImageRequestOptions类中存在一个bug,因此在下面的代码中我们传递了nil,这对我很有帮助。

            dispatch_semaphore_t sema = dispatch_semaphore_create(0);
            [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
                assetModel.size = imageData.length;
                NSString *filename = [asset valueForKey:@"filename"];
                assetModel.fileName = filename;
                dispatch_semaphore_signal(sema);
            }];
            dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接