相关疑难解决方法(0)

iOS 12的具体问题:核心数据外部存储二进制数据损坏

我花了很多时间试图解决这个问题.

背景

我有一个简单的核心数据模型,有书籍和阅读课程.这些书的封面(图像)以"允许外部存储"存储为二进制数据.

在iOS 11.4及更低版本中,一切都运行良好.当我保存新会话时,所有内容都会正确更新.

问题

由于iOS的12,当我创建一个新的阅读会话并将其链接到这本书,大约每的时间,核心数据生成SQL语句也更新图书封面领域,有时会造成不好的引用(到磁盘上的文件),它通常会在重新启动应用程序时导致封面为零,并且几乎总是在磁盘上创建封面的副本(如模拟器的_EXTERNAL_DATA文件夹中所示).

内存上下文和对象保持正确(因此UI中的所有内容都可以),直到应用程序重新启动,然后封面通常为零.

iOS 12具体

在iOS 12上,我可以确定地在物理设备上重现模拟器中的错误,并且用户也报告了错误.我无法在iOS 11.4上重现错误,也没有用户报告iOS 12之前的错误.

采取的步骤

  • 我启用了" -com.apple.CoreData.ConcurrencyDebug 1",所以不应该是我从错误的队列中访问任何东西.我也启用了" -com.apple.CoreData.SQLDebug 3",以便我可以确切地看到写入的内容.

  • 我做了保证书的情况下(因此盖)通过我的代码以通过检查新会联想之前没有修改hasChanges,只是我之前做newSession.book = bookcontext.save().

  • 为了100%肯定我没有触及任何线程上的封面属性我已经将我的getter和setter用于该属性的短路.没有得到改善.

  • 我已经尝试objectID过在关联之前请求一本书的实例并保存.没有得到改善.

  • 我甚至尝试了上下文保持对所有对象的强引用的选项,只是为了确保它不是某种内存管理问题.没有得到改善.

下一步的任何想法?

状态更新

这是iOS 12中的一个缺陷.请参阅下面接受的答案,了解有关合理解决方法的详细说明.

core-data ios swift ios12

27
推荐指数
1
解决办法
3065
查看次数

标签 统计

core-data ×1

ios ×1

ios12 ×1

swift ×1