我正在使用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)")
}
}