我有一个代码块,它遍历许多托管对象并从它们之间的关系访问其他托管对象。如果98%的时间都能正常工作,但有时会崩溃,并显示以下日志:
线程6崩溃:
0 libobjc.A.dylib 0x000000018d51af70 objc_msg发送+ 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 - 与故障相关的很少核心数据崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41490313/