requestImageDataForAsset не удается, когда мы запрашиваем PHAsset в iPhone SDK?
Я использую инфраструктуру фотографий на iOS9.2, и мы запрашиваем данные изображения для PHAsset, используя метод requestImageDataForAsset. Большую часть времени он работает, но некоторое время его imageData равен нулю, в случае, когда мы запрашиваем Asset с большой продолжительностью видео, и словарь результатов содержит все пары ключ-значение, которые входят в каждый набор PHAsset.
Вот некоторый код, где я запрашивал imageData с помощью requestImageDataForAsset, но я все равно никогда не получал 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 ответ
Я заметил две вещи:
- Почему вы используете семафор для блокировки? Вы устанавливаете установленное синхронное свойство
PHImageRequestOptions
вYES
, что должно быть достаточно для не асинхронного (блокирующего) запроса. requestImageDataForAsset
метод PHImageManager возвращает сопоставленный файлNSData
объекты. Они ограничены размером около 1 ГБ. Если вы вызываете requestImageDataForAsset для больших видео активов,NSData
объект не может быть создан, и вы получите нулевой объект в качестве возврата. Чтобы запросить данные для видео, пожалуйста, посмотрите наrequestExportSessionForVideo
,