Я использую фреймворк фотографий на iOS8.1 и запрашиваю данные изображения для объекта с помощью requestImageDataForAsset ... В большинстве случаев он работает, и я получаю данные изображения и словарь, содержащий то, что вы Смотри ниже. Но иногда вызов завершается, но данные равны нулю, а словарь содержит три генерирующих элемента.Фотографии Framework requestImageDataForAsset иногда не удается
Вызовы выполняются последовательно и в одном потоке. Это не относится к какому-либо конкретному изображению. Ошибка будет происходить на изображениях, которые я успешно открыл в прошлом. Кто-нибудь сталкивался с этим?
+ (NSData *)retrieveAssetDataPhotosFramework:(NSURL *)urlMedia resolution:(CGFloat)resolution imageOrientation:(ALAssetOrientation*)imageOrientation {
__block NSData *iData = nil;
PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[urlMedia] options:nil];
PHAsset *asset = [result firstObject];
PHImageManager *imageManager = [PHImageManager defaultManager];
PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
options.synchronous = YES;
options.version = PHImageRequestOptionsVersionCurrent;
@autoreleasepool {
[imageManager requestImageDataForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
iData = [imageData copy];
NSLog(@"requestImageDataForAsset returned info(%@)", info);
*imageOrientation = (ALAssetOrientation)orientation;
}];
}
assert(iData.length != 0);
return iData;
}
Это желаемый результат, когда я получаю данные изображения и словарь метаданных:
requestImageDataForAsset returned info({
PHImageFileDataKey = <PLXPCShMemData: 0x1702214a0> bufferLength=1753088 dataLength=1749524;
PHImageFileOrientationKey = 1;
PHImageFileSandboxExtensionTokenKey = "6e14948c4d0019fbb4d14cc5e021199f724f0323;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000003;000000000009da80;/private/var/mobile/Media/DCIM/107APPLE/IMG_7258.JPG";
PHImageFileURLKey = "file:///var/mobile/Media/DCIM/107APPLE/IMG_7258.JPG";
PHImageFileUTIKey = "public.jpeg";
PHImageResultDeliveredImageFormatKey = 9999;
PHImageResultIsDegradedKey = 0;
PHImageResultIsInCloudKey = 0;
PHImageResultIsPlaceholderKey = 0;
PHImageResultWantedImageFormatKey = 9999;
})
Вот что я получаю время от времени. данные изображения равны нулю. Словарь содержит не так много.
requestImageDataForAsset returned info({
PHImageResultDeliveredImageFormatKey = 9999;
PHImageResultIsDegradedKey = 0;
PHImageResultWantedImageFormatKey = 9999;
})
Это также происходит со мной, для изображений в общих потоках iCloud. Пока нет решения. – an0
Кажется, что это происходит регулярно (около 100%) при попытке использовать options.synchronous = YES для получения изображения для актива в потоке фото iCloud (a.k.a., Shared Album), который еще не был загружен. Если изображение было загружено и кэшировано либо приложением «Фотографии», либо асинхронно с помощью моего приложения, оно отлично работает. В противном случае синхронная загрузка всегда терпит неудачу. Я пробовал iOS 8.x, 9.0 и 9.1 с теми же результатами. – LenK
Я также сталкиваюсь с этой проблемой. Мое обходное решение заключается в установке options.synchronous = NO –