PHImageManager requestImageForAsset не удалось получить изображение
Я использую этот метод: PHImageManager requestImageForAsset
извлечь изображение из PHAsset
, Когда я тестирую это работает нормально. Но когда приложение попадает в App Store, некоторые пользователи жалуются, что изображения загружаются неправильно.
Ниже приведен код, который я использую. Я не получаю никаких ошибок в журналах ошибок. я использую PHAsset
локальный идентификатор для получения локального идентификатора phasset.phasset (F24E28A0-5683-4F75-862C-63DCB96B465A/L0/001) выглядит примерно так.
Просматривая логи, я обнаружил, что некоторые изображения не работают. Не все изображения, только некоторые.
Что может быть причиной этой проблемы?
PHFetchResult *assetsList = [PHAsset fetchAssetsWithLocalIdentifiers:[NSArray arrayWithObject:assetUrl] options:nil];
asset = assetsList.firstObject;
//Find Aspect Ratio of image(If its over 800 width trim to 800)
CGSize preferedSize;
if(asset != nil)
{
if (asset.pixelWidth > ImageMaxSize )
{
CGFloat ratio = ImageMaxSize/asset.pixelWidth;
preferedSize = CGSizeMake(ImageMaxSize, asset.pixelHeight * ratio);
}
else
{
preferedSize = CGSizeMake(asset.pixelWidth, asset.pixelHeight);
}
}
else{
preferedSize = PHImageManagerMaximumSize;
}
PHImageRequestOptions *option = [[PHImageRequestOptions alloc]init];
option.resizeMode = PHImageRequestOptionsResizeModeExact;
option.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
option.networkAccessAllowed = TRUE;
option.synchronous = TRUE;
[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:preferedSize contentMode:PHImageContentModeDefault options:option resultHandler:^(UIImage *result, NSDictionary *info)
{
NSError *error = [info objectForKey:PHImageErrorKey];
if (error)
{
DDLogVerbose(@"err: %@", error.localizedDescription);
DDLogWarn(@"createScaledImage - error - %@", error);
dispatch_group_leave(group);
}
else
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *documentdataPath = [documentsDirectory stringByAppendingPathComponent:@"images"];
NSError * error = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:documentdataPath
withIntermediateDirectories:YES
attributes:nil
error:&error];
if (error != nil) {
DDLogWarn(@"createScaledImage - error creating directory: %@", error);
NSLog(@"error creating directory: %@", error);
//..
}
NSString* fullfile = [documentdataPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg", [[NSUUID UUID] UUIDString]]];
NSData * jpgData;
UIImage *image = result;
jpgData = UIImageJPEGRepresentation(image, ImageCompressionQuality);
DDLogWarn(@"createScaledImage - jpg data length %1.0lu", (unsigned long)jpgData.length);
bool isCreated = [jpgData writeToFile:fullfile atomically:YES];//you can save image later
DDLogWarn(@"createScaledImage - writeToFile - isCreated %d", isCreated);
scaledImageUrl = fullfile;
dispatch_group_leave(group);
}
}];