2015-08-22 27 views
2

我已阅读堆栈溢出有关此错误的所有答案,并没有解决这种情况,因为我的问题有点不同。我是否必须下载所有iCloud文件才能生成缩略图?

我正在枚举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]; 

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

couldn't generate thumbnail, error:Error Domain=NSURLErrorDomain Code=-1100 "The requested URL was not found on this server." UserInfo={NSLocalizedDescription=The requested URL was not found on this server., NSUnderlyingError=0x15f82b2a0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

的问题是与URL,你说,但URL直接从“NSMetadataItem”中提取,并具有以下形式:

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

... in thi这部电影被称为0 - intro.mov

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

突破

我现在,我要下载的iCloud的驱动器上的所有文件发现(使用startDownloadingUbiquitousItemAtURL:error:)到设备,能够产生自己的缩略图,似乎是疯了。想象一下,远程拥有几千兆字节的视频,并且必须下载所有文件才能显示缩略图。

它必须以另一种方式存在。证明是,UIDocumentPicker显示了iCloud上所有未下载视频的缩略图。

任何线索?

+1

这有帮助吗? http://stackoverflow.com/questions/27420380/nsurlthumbnaildictionarykey-empty-for-local-file – Charlie

+0

特别是对于鲜为人知的话题(以及任何核心内容),查找相关文档可能是一场噩梦。 – Charlie

回答

3

我认为这个问题是由于在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]; 
+0

不能投你够!我打了3天这个!谢谢!!!!! – SpaceDog

+0

@SpaceDog当然是:-) – Charlie

+0

由于某种原因,在升级到iOS 8.4.1之后,这不再起作用 – SpaceDog

相关问题