与故障相关的很少核心数据崩溃

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与故障相关的很少核心数据崩溃相关的知识,希望对你有一定的参考价值。

我有一个代码块,它遍历许多托管对象并从它们之间的关系访问其他托管对象。如果98%的时间都能正常工作,但有时会崩溃,并显示以下日志:

线程6崩溃:

0 libobjc.A.dylib 0x000000018d51af70 objc_msgSend + 16

1 CoreData 0x0000000190dddef0-[NSManagedObjectContext(_NSInternalAdditions)_retainedObjectWithID:optionalHandler:withInlineStorage:] + 84

2 CoreData 0x0000000190e2fc40-[_ NSFaultingMutableSet willReadWithContents:] + 580

3 CoreData 0x0000000190dfe1ac-[_ NSFaultingMutableSet countByEnumeratingWithState:objects:count:] + 44

我知道相关对象可能是故障。根据文档,CoreData按以下方式处理它:

故障处理是透明的-您不必执行提取即可实现故障。如果在某个阶段访问了故障对象的持久属性,则Core Data会自动检索该对象的数据并初始化该对象。

如何解释(假设没有删除)?希望更好地了解它。

答案

我知道这真的很晚,但我只是遇到了完全相同的错误,希望这对其他人(以及将来对我自己)有帮助。此错误很可能是由于在与启动线程不同的线程上访问Core Data引起的。在我的情况下,核心数据是在不再位于主线程上的完成处理程序中访问的。

为了帮助调试,您可以使用并发调试断言来运行代码。您可以通过在Xcode的方案编辑器的“启动时传递的参数”部分中添加-com.apple.CoreData.ConcurrencyDebug 1来启用它。 This article has instructions with that。每当我从其他线程访问核心数据时,这都会导致我的应用始终崩溃,从而易于修复。

以上是关于与故障相关的很少核心数据崩溃的主要内容,如果未能解决你的问题,请参考以下文章

核心数据故障

iOS 中的核心数据故障

服务器数据恢复raid损坏导致戴尔某型号服务器崩溃的数据恢复案例

核心数据故障消息

这次核心数据崩溃的可能原因是啥

核心数据随机崩溃,可能存在并发问题