Не удается получить доступ к мультимедийному файлу из / var / mobile / Media / PhotoData / Sync / 100SYNCD / папки из PHAssets в iOS? - PullRequest
0 голосов
/ 01 ноября 2019

Я использовал библиотеку CTAssetsPickerController для доступа к фотографии iOS. Я синхронизировал фотографию со своего MAC на iPhone через iTunes, и эта фотография доступна в моей телефонной галерее как С моего 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.

1 Ответ

0 голосов
/ 14 ноября 2019

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

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

или

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

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

...