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);
        }

    }];

0 ответов

Другие вопросы по тегам