我理解为什么会发生此错误:当您尝试访问在另一个线程上的托管对象上下文中删除的 CoreData 对象时,因此被设置为“故障”对象,因此任何保留的引用将不再指向有效的核心数据对象。
我正在使用 NSFetchedResultsController。
我已确认所有代码均已正确实施。我有 2 个托管对象上下文,一个用于 BG 线程,一个用于主线程。
我已经确认主线程订阅了 NSManagedObjectContextDidSaveNotification 下的通知。
我已确认当此通知触发时,我会在主线程托管对象上下文中执行 mergeChangesFromContextDidSaveNotification:。
我没有在任何地方保留这些对象,但我正在为 NSFetchRequest 设置批处理大小(这可能是问题吗?)
然而,我仍然偶尔会收到“CoreData 无法完成错误”错误。
在我的特定应用程序中,这通常发生在某种“数据绑定”过程中,因此我可以安全地丢弃故障对象并继续前进。我想通过将数据绑定的循环内部包装在 @try-catch 块中并跳过我得到 CoreData 错误的行来做到这一点。
我可以用 CoreData 安全地做到这一点吗?或者我是否需要在遇到故障后完全转储托管对象上下文。
我确实检查了这个关于如何检查 CoreData 对象是否为错误的问题,如果我不能安全地假设我的 @try-catch 块不会导致其他问题,这可能是我实现的。