我正在使用 swift 开发基于文档的应用程序UIDocumentBrowserViewController
。我希望应用程序默认打开上次会话中使用的上一个文件。退出应用程序时,我将文件 URL 保存在 UserDefaults 中。当我重新启动应用程序时,会UIDocumentBrowserViewController
显示它的视图。我想添加viewDidLoad()
一个 if 语句来检查 a 是否fileURL
存在于UserDefaults
. 如果是,我想选择那个文件,打开它并展示它。最简单的方法似乎是弄清楚如何背负presentDocument(at: documentURL)
我正在使用的现有方法UIDocumentBrowserViewController
,或者可能是 UIDocumentBrowserViewControllerDelegate 方法之一;换句话说,我想以编程方式选择一个文件UIDocumentBrowserViewController
并呈现它。但是,当我尝试这样做时,文档无法打开,在UIDocument
方法open(completionHandler: )
(即完成处理程序报告失败)。我确定我有正确的 fileURL,我尝试使用的文件也在云目录中关于如何实现它的任何想法?
问问题
168 次
1 回答
0
我发现您必须使用书签而不是 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)")
}
}
于 2019-08-21T03:20:46.267 回答