从 UIDocumentPicker 下载文件并等待下载完成
Posted
技术标签:
【中文标题】从 UIDocumentPicker 下载文件并等待下载完成【英文标题】:Download files from UIDocumentPicker and wait until download has finished 【发布时间】:2015-02-23 18:53:29 【问题描述】:我正在尝试从以下位置下载文件
-documentPicker:didPickDocumentAtURL:
方法。 我尝试使用
获取文件的数据NSData *data = [NSData dataWithContentsOfURL:url];
但它没有按我的预期工作,因为 UIDocumentPicker 在文件下载之前触发 -documentPicker:didPickDocumentAtURL: -方法。
下载文件后如何从文件中获取 NSData?
在此先感谢您,费边。
【问题讨论】:
【参考方案1】:文件实际上是下载的,但是您需要使用文件协调器来读取文件内容。应该这样做:
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
NSError *error = nil;
[coordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL)
NSData *data = [NSData dataWithContentsOfURL:newURL];
// Do something
];
if (error)
// Do something else
【讨论】:
您不必使用 NSFileCoordinator,因为此委托调用似乎是同步的,并且 dataWithContents 工作得非常好。 好吧,这对他不起作用。另外,我认为避免使用 NSFileCoordinator 会留下太多的机会。苹果表示,“所有与文件相关的操作都必须通过文件协调器对象来执行。” developer.apple.com/library/ios/documentation/FileManagement/… 没错。但随着 iOS 更新到 iOS 8.3,UIDocumentPicker 会在关闭之前下载显示活动指示器的文件。当 UIDocumentPicker 实际被解除时,我可以在没有 NSFileCoordinator 的情况下访问该文件。 当然,除非它在您访问它时发生变化。 iCloud 同步可以随时发生。顺便说一句,我确实注意到了活动指示器,并且很高兴看到它。 你能帮忙***.com/questions/30613645/…以上是关于从 UIDocumentPicker 下载文件并等待下载完成的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 中导入文件:UIDocumentPicker 与 UIDocumentBrowser
无法使用 UIDocumentPicker 导入页面和编号文档
无法使用 UIViewRepresentable 和 UIDocumentPicker 选择文件夹
如何使用 UIDocumentPicker 将 pdf 文件导入表格视图单元格