【问题标题】:Pick UIDocument automatically in UIDocumentBrowserVC在 UIDocumentBrowserVC 中自动选择 UIDocument
【发布时间】:2018-07-22 20:47:48
【问题描述】:

我正在使用uidocumentbrowservc 并希望以编程方式选择UIDocument。就我而言,这是因为我想自动加载上次使用的 UIDocument 以在启动时为用户节省一些时间,因为我的应用很少更改文档。

我天真的方法是将上次使用的URL 存储在UserDefaults 中。然后在我的uidocumentbrowservcviewDidLoad() 中调用presentDocument(at: URL)。但它不起作用。当我打电话给URL.checkResourceIsReachable() 时,我得到了错误:

Error Domain=NSCocoaErrorDomain Code=257 "文件“myFile”不能 因您无权查看而被打开。”

文件路径为:

/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/MyApp/myFile.

据我了解,我无权访问它,因为它不在我的沙箱中(它可能在用户保存它的任何地方?)。

有什么建议吗?我确信存在更好的方法来做到这一点。

【问题讨论】:

  • 请改进格式

标签: ios swift uidocument uidocumentbrowservc


【解决方案1】:

您不能只保存 URL。您还需要保存 UIDBVC 授予您的沙盒扩展。保存书签而不是 URL 可以做到这一点。此外,如果用户移动文件(例如在不同设备上的 iCloud Drive 中重命名),书签将继续工作。普通 URL 不会。

使用选项 .withSecurityScope 和 URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error: 检查 URL 的 bookmarkData(options:includingResourceValuesForKeys:relativeTo:)(然后不要忘记在结果 URL 上调用 start/stopAccessing)

【讨论】:

  • 谢谢,成功了!请注意,我没有找到 .withSecurityScope 选项,也许它只在 macOS 上可用?另外据我了解 UIDocument 负责启动/停止访问。
  • 对,withSecurityScope 仅在 macOS 上可用。我猜你实际上不需要它来处理源自 UIDBVC 的项目。沙盒信息似乎以不同的方式保留。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2022-07-06
  • 2021-10-29
  • 2014-12-26
相关资源
最近更新 更多