首页 > 解决方案 > 解析 iOS URL 书签数据最终开始失败

问题描述

我有一个 iOS 应用程序,我正在尝试使用 UserDefaults 持久化和重新加载书签数据。似乎工作正常,但我遇到了一个问题,有时从书签数据到 URL 的转换失败。它似乎可以在一段时间内正常工作(甚至在应用程序终止和重新启动等过程中),但最终书签数据会失败(可能在几个小时后?)。

因此,当像这样解析书签数据时:

let url = try URL(resolvingBookmarkData: data, bookmarkDataIsStale: &isStale)

捕获的异常被抛出并带有描述:Error Domain=NSCocoaErrorDomain Code=4 "The file doesn’t exist."

我将书签作为数据存储在 UserDefaults 中。我只需使用以下内容创建书签数据:

let bookmarkData = try url.bookmarkData(options: .minimalBookmark)

有趣的是,如果我再次从文档选择器中手动选择相同的文件,那么存储在 UserDefaults 中的原始书签将再次可以访问。

我查看了 GitHub 中的开源代码,并没有发现我的实现与其他实现有任何实质性不同。寻找有关可能导致此问题的任何提示或想法。

标签: iosswiftnsurlsecurity-scoped-bookmarks

解决方案


原来我的问题是因为我没有将书签存储到原始文件中,而是存储在 tmp 目录中的副本。我最近刚刚重构了一些东西,不小心开始使用 UIDocumentPickerMode.import 而不是 UIDocumentPickerMode.open。这解释了为什么它会在任意时间段内工作,直到 tmp 目录被清除。


推荐阅读