解决iOS URL书签数据最终开始失败

时间:2018-12-15 20:07:59

标签: ios swift nsurl security-scoped-bookmarks

我有一个iOS应用,我尝试在其中使用UserDefaults保留并重新加载书签数据。似乎可以正常运行,但是我遇到一个问题,有时从书签数据到URL的转换失败。在一段时间内(即使在应用程序终止和重新启动等过程中),它似乎也可以正常工作,但最终书签数据将失败(可能是几个小时后?)。

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

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

抛出一个捕获的异常,其描述为:Error Domain=NSCocoaErrorDomain Code=4 "The file doesn’t exist."

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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