我们在iPhone sdk中请求PHAsset时,requestImageDataForAsset是否失败?

时间:2016-02-29 12:19:51

标签: ios phasset photosframework

我在 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;
    }

1 个答案:

答案 0 :(得分:0)

我注意到两件事:

  1. 为什么使用信号量阻止?您将PHImageRequestOptions的set同步属性设置为YES,这对于非异步(阻塞)请求应该足够了。
  2. PHImageManager的requestImageDataForAsset方法返回文件映射的NSData个对象。它们的大小限制在1GB左右。如果为大型视频资源调用requestImageDataForAsset,则无法创建NSData对象,并且您将获得一个nil对象作为返回。要请求视频数据,请查看requestExportSessionForVideo