Не удается получить доступ к медиафайлу из папки /var/mobile/Media/PhotoData/Sync/100SYNCD/ из PHAssets в iOS?

Я использовал библиотеку CTAssetsPickerController для доступа к фотографии iOS. Я синхронизировал фотографию с моего MAC на iPhone через iTunes, и фотография доступна в моей телефонной галерее как From My Mac. Но когда я выбрал активы из средства выбора, то в информации об активах я получаю URL-адрес файла в виде файла:///var/mobile/Media/PhotoData/Sync/100SYNCD/IMG_0002.JPG, и по указанному URL-адресу НЕТ данных.

  **PHAsset *asset = [self assetAtIndexPath:indexPath];
            if (asset.mediaType == 1) {
                if (@available(iOS 9.0, *)) {
                    NSArray *arr = [PHAssetResource assetResourcesForAsset:asset];
                    if (arr) {
                        PHAssetResource *resource = arr.firstObject;
                        if (resource) {
                            NSUInteger fileSize = [[resource valueForKey:@"fileSize"] integerValue];
                            NSLog(@"size %lu",(unsigned long)fileSize);
                            if (fileSize < self.picker.maxLimitSize) {
                                [self.picker selectAsset:asset];
                                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                                    [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
                                        NSURL *fileURL = [info valueForKey:@"PHImageFileURLKey"];
                                        NSData *imagedata = [NSData dataWithContentsOfURL:fileURL];
                                        [self.picker addURL:fileURL atIndex:self.selectedAssetsCounts];
                                        ++self.picker.selectMediaFiles;
                                    }];
                                });
                            }else{
                                [self showAlertMessageWithTitle: CTAssetsPickerLocalizedString(@"sizelimitexceed", nil) andMessage:CTAssetsPickerLocalizedString(@"mediasizelimitmessage", nil) withIndex:indexPath];
                            }
                        }
                    }**



Please guide me . thanks in advance.

person Dinesh Tanwar    schedule 01.11.2019    source источник


Ответы (1)


Вы не должны полагаться на PHImageFileURLKey. Он никогда официально не поддерживался и даже не документировался. Используйте один из методов PHImageManager как

func requestImage(for asset: PHAsset, 
       targetSize: CGSize, 
      contentMode: PHImageContentMode, 
          options: PHImageRequestOptions?, 
    resultHandler: @escaping (UIImage?, [AnyHashable : Any]?) -> Void) -> PHImageRequestID

or

func requestImageDataAndOrientation(for asset: PHAsset, 
                            options: PHImageRequestOptions?, 
                      resultHandler: @escaping (Data?, String?, CGImagePropertyOrientation, [AnyHashable : Any]?) -> Void) -> PHImageRequestID

Пожалуйста, посмотрите здесь: PHImageResultIsDegradedKey/PHImageFileURLKey не найден

person holtmann    schedule 13.11.2019