0

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

4

1 回答 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 回答