我在 iOS9.2 上使用照片框架,我们使用 requestImageDataForAsset 请求 PHAsset 的图像数据方法,大部分时间都有效,但有时候 imageData 为零,如果我们要求大视频持续时间资产,结果字典包含全部为每个PHAsset提供的键值对。
以下是我通过requestImageDataForAsset请求imageData的一些代码,但我从来没有得过imageData。
@autoreleasepool {
__block NSData *data = nil;
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
PHImageRequestOptions* options = [[PHImageRequestOptions alloc] init];
options.synchronous = YES;
options.version = PHImageRequestOptionsVersionOriginal;
options.networkAccessAllowed = YES;
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
[[PHImageManager defaultManager] requestImageDataForAsset:assest options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
data = imageData;
dispatch_semaphore_signal(sem);
}];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
return data;
}
答案 0 :(得分:0)
我注意到两件事:
PHImageRequestOptions
的set同步属性设置为YES
,这对于非异步(阻塞)请求应该足够了。requestImageDataForAsset
方法返回文件映射的NSData
个对象。它们的大小限制在1GB左右。如果为大型视频资源调用requestImageDataForAsset,则无法创建NSData
对象,并且您将获得一个nil对象作为返回。要请求视频数据,请查看requestExportSessionForVideo
。