首页 文章

我是否必须下载所有iCloud文件才能生成缩略图?

提问于
浏览
3

我已经阅读了有关此错误的堆栈溢出的所有答案,但没有一个解决了这个问题,因为我的问题有点不同 .

我正在枚举iCloud驱动元素 NSMetadataItem 并将它们存储在一个数组上 .

文件在那里:通过查看OS X上的iCloud文件夹以及使用 UIDocumentPicker 的设备进行确认 .

稍后在代码中我尝试使用以下方法检索此类元素的缩略图:

// self.item is a NSMetadataItem
NSURL *fileURL = [self.item valueForAttribute:NSMetadataItemURLKey];

AVAsset *asset = [AVAsset assetWithURL:fileURL];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform = YES;

CMTime time = CMTimeMakeWithSeconds(1, 60);

AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
  if (result != AVAssetImageGeneratorSucceeded) {
    NSLog(@"couldn't generate thumbnail, error:%@", error);
  }

  // TODO Do something with the image
};

generator.maximumSize = size;
[generator generateCGImagesAsynchronouslyForTimes:@[[NSValue valueWithCMTime:time]]
                                completionHandler:handler];

我在处理程序中收到此错误:

无法生成缩略图,错误:错误域= NSURLErrorDomain代码= -1100“在此服务器上找不到请求的URL . ” UserInfo = {NSLocalizedDescription =在此服务器上找不到请求的URL . ,NSUnderlyingError = 0x15f82b2a0 {错误域= NSPOSIXErrorDomain代码= 2“没有这样的文件或目录”}}

问题在于URL,你说,但URL是直接从`NSMetadataItem'中提取的,并且具有表单

file:///private/var/mobile/Library/Mobile%20Documents/iCloud〜com~myCompany~myApp/Documents/0%20-%20intro.mov

...在这种情况下,电影被称为 0 - intro.mov

我已经尝试了3种其他方法来下载缩略图 . 没有用 .

Breakthrough

我现在已经发现我必须将iCloud驱动器上的所有文件(使用 startDownloadingUbiquitousItemAtURL:error: )下载到设备才能生成缩略图,这看起来很疯狂 . 想象一下,远程拥有几千兆字节的视频,并且必须下载所有文件才能显示缩略图 .

它必须以另一种方式存在 . 证据是 UIDocumentPicker 显示iCloud上所有视频的缩略图而不下载它们 .

有线索吗?

1 回答

  • 5

    我认为问题是由于在找到URL之后读取文件的权限 . 但是,根据this answer,您应该可以使用以下内容执行此操作:

    [url startAccessingSecurityScopedResource];
    
    NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] init];
    __block NSError *error;
    [coordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {
        [newURL getResourceValue:&image forKey:NSURLThumbnailDictionaryKey error:&error];
    }];
    
    [url stopAccessingSecurityScopedResource];
    

相关问题