UIDocument、FileWrapper 和第三方文件提供程序

Posted

技术标签:

【中文标题】UIDocument、FileWrapper 和第三方文件提供程序【英文标题】:UIDocument, FileWrapper & Third-Party File Providers 【发布时间】:2018-12-04 17:10:53 【问题描述】:

我在我的应用程序中使用文档包(通过 FileWrapper API),并且我正在使用 UIDocumentBrowserViewController 类进行文档管理。文档包基本上代表(文本)文件和文件夹的层次结构。当文档存储在设备或 iCloud 中时,一切正常。但是,当我尝试在远程位置创建文档时,情况就不同了,访问权限由第三方文件提供商提供,例如 Google Drive、Microsoft One Drive 或 Dropbox。每次我尝试在任何这些位置创建文档时,我都会调用 importHandler(fileURL, .move):

    Dropbox:失败并出现一般错误消息:“操作无法 完成。 (DBFileProviderErrorDomain 错误 1.)";

    Google Drive:失败并显示略有不同的消息:“The 操作无法完成。 (com.apple.DocumentManager 错误 1.)"

    MS OneDrive:似乎成功,但在尝试打开新的 创建的文档应用程序被交给了一个 OS_dispatch_data 对象 一个 FileWrapper 对象,这是它所期望的。

我不确定发生了什么。我唯一能想到的是文档包仅在 Apple 文件系统上受支持。

非常感谢任何建议。 谢谢。

【问题讨论】:

【参考方案1】:

据我所知(并确认您的怀疑),大多数非 iCloud 云存储提供商(通过UIDocumentBrowserViewController 访问)的文件提供商扩展不能很好地处理包。例如,UIManagedDocument 对象以包格式存储其数据存储,而我尝试使用UIDocumentBrowserViewController 创建/保存/移动它们到非 iCloud 云存储的经验通常以失败告终。请参阅我向 Apple 提交的错误报告的 OpenRadar 副本,http://openradar.appspot.com/6905951。

【讨论】:

以上是关于UIDocument、FileWrapper 和第三方文件提供程序的主要内容,如果未能解决你的问题,请参考以下文章

处理包含多个图像的 UIDocument 中的图像加载/存储

如何更新 UIDocument 数据

同步打开 UIDocument

为啥加载 UIDocument 需要 40 秒?

autosaveWithCompletionHandler:(UIDocument)覆盖问题

如何在主队列上加载 UIDocument?