与故障相关的很少核心数据崩溃
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。每当我从其他线程访问核心数据时,这都会导致我的应用始终崩溃,从而易于修复。
以上是关于与故障相关的很少核心数据崩溃的主要内容,如果未能解决你的问题,请参考以下文章