在 UIDocumentBrowserVC 中自动选择 UIDocument

Pick UIDocument automatically in UIDocumentBrowserVC

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

我天真的做法是将上次使用的 URL 存储在 UserDefaults 中。然后在我的 uidocumentbrowservcviewDidLoad() 中调用 presentDocument(at: URL)。但它不起作用。当我调用 URL.checkResourceIsReachable() 时出现错误:

Error Domain=NSCocoaErrorDomain Code=257 "The file “myFile” couldn’t be opened because you don’t have permission to view it."

文件路径为:

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

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

有什么建议吗?我相信有更好的方法可以做到这一点。

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

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