以编程方式从 UIDocumentBrowserViewController 中的 UserDefaults 打开文档



我正在使用UIDocumentBrowserViewController在 swift 中开发一个基于文档的应用程序。 我希望应用程序默认打开上次会话中使用的上一个文件。 退出应用程序时,我将文件URL保存在用户默认值中。 当我重新启动应用程序时,UIDocumentBrowserViewController显示其视图。 我想viewDidLoad()添加一个 if 语句,该语句检查fileURL是否退出UserDefaults。 如果是这样,我想选择该文件,打开它并显示它。最简单的方法似乎是弄清楚如何利用我正在使用的现有presentDocument(at: documentURL)方法UIDocumentBrowserViewController,或者可能从UIDocumentBrowserViewControllerDelegate方法之一中捎带;换句话说,我想以编程方式选择一个UIDocumentBrowserViewController文件并呈现它。 但是,当我尝试这样做时,文档无法打开,在UIDocument方法open(completionHandler: )(即完成处理程序报告失败)。 我确定我有正确的 fileURL,而且我尝试执行此操作的文件在云目录中 关于如何实现它的任何想法?

我发现你必须使用书签而不是URL。 创建书签并将其保存到UserDefaults的代码如下:

do {
let bookmark = try (document.fileURL as NSURL).bookmarkData(options: .suitableForBookmarkFile, includingResourceValuesForKeys: nil, relativeTo: nil)         
UserDefaults.standard.set(bookmark, forKey: "bookmark")
} catch let error as NSError {
print("Set Bookmark Fails: (error.description)"
}

检索书签、将其转换为 URL 并呈现文档的代码如下:

if let bookmarkData = (UserDefaults.standard.object(forKey: "bookmark") as? NSData) {
do {
let url = try NSURL.init(resolvingBookmarkData: bookmarkData as Data, options: .withoutUI, relativeTo: nil, bookmarkDataIsStale: nil)
url.startAccessingSecurityScopedResource()
presentDocument(at: url as URL)
} catch let error as NSError {
print("Bookmark Access Fails: (error.description)")
}
}

相关内容

  • 没有找到相关文章

最新更新