从 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 文件导入表格视图单元格

使用自定义 UTI 删除 UIDocumentPicker 导入/导出

UIDocumentPicker 导航栏按钮在 iOS 11 中隐藏