我已经坚持了几天。我试图在回调中获取图像,但我总是得到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
的较小版本的图像;然而,当我试图获得它的更大版本时,我得到零。我知道手机上存在更高分辨率的图像(我可以在照片应用中看到它)
任何帮助将不胜感激。
答案 0 :(得分:3)
我遇到了类似的问题,并尝试将PHImageRequestOptions对象上的networkAccessAllowed选项设置为YES - 这似乎解决了这个问题。对我来说,问题肯定是图像在云端,因为相机胶卷上的图像工作正常,但云中的图像没有。
答案 1 :(得分:0)
我有同样的问题。我认为PHImageRequestOptions类中存在一个错误,因此我们在下面的代码中传递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);