ios - 解析 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 中的开源代码,并没有发现我的实现与其他实现有任何实质性不同。寻找有关可能导致此问题的任何提示或想法。
解决方案
原来我的问题是因为我没有将书签存储到原始文件中,而是存储在 tmp 目录中的副本。我最近刚刚重构了一些东西,不小心开始使用 UIDocumentPickerMode.import 而不是 UIDocumentPickerMode.open。这解释了为什么它会在任意时间段内工作,直到 tmp 目录被清除。
推荐阅读
- rust - rust statrs 样本不在范围内?
- python - 如何在 Python 中将浮点列表转换为 int 对列表?
- reactjs - 反应原生
里面 不包装 - api - Rails 5如何为会话创建动作编写api控制器功能测试
- json - 无法从 api 调用中获取 Json 数据
- pdf - PDF复制文本问题:奇怪的字符
- r - 当最后一个时间单位只有 1 个观测值时,R 预测中的 ggseasonplot 不显示预测
- python - 我正在使用线程,所以为什么让我的 gui 一直冻结 Oo
- cython - 如何使用任何 pystan 代码解决或抑制警告墙
- php - 在 Laravel 中,Dio 为空的 Flutter 文件上传