核心数据 - NSFetchedResultsController 错误

Posted

技术标签:

【中文标题】核心数据 - NSFetchedResultsController 错误【英文标题】:Core Data - NSFetchedResultsController bug 【发布时间】:2011-10-24 10:30:28 【问题描述】:

似乎 controllerDidChangeContent: 在我的上下文中创建一个新的托管对象后立即被调用。文档似乎建议仅在保存后调用此方法:上下文。

这个“错误”如果是一个,会导致我的应用程序崩溃,因为作为我的表格视图单元格的一部分,我需要加载在创建主托管对象时不存在的其他托管对象。

似乎也有人发现了这一点,请查看以下链接,我很想听听您对此的意见:http://openradar.appspot.com/10207615


更多信息

虽然我添加到这篇文章的链接展示了一个使用两个 NSManagedObjectContext 的示例,但我的应用程序正在使用一个上下文,但是一旦在唯一的上下文中创建了一个对象,就会立即向 controllerDidChangeContent: 发送消息,并且controllerDidChangeContent: 在我保存时第二次被调用:这个上下文。据我了解,此方法仅应在保存上下文时发送消息。

【问题讨论】:

您是否通过使用断点单步执行代码来检查? 是的,我做到了,一旦执行了创建托管对象的代码块,就会向 controllerDidChangeContent: 发送消息。看看链接,它演示了这个问题。 【参考方案1】:

解决办法是避免处理多个managedObjectContext。如果您的单元需要加载其他托管对象,它仍应使用与主托管对象相同的托管对象上下文。

我还没有看到一个用例,其中绝对不可避免地使用多个托管对象上下文来引用同时活动的同一模型。

【讨论】:

嗨 Mundi,我实际上只在我的应用程序中使用一个上下文,在应用程序委托中创建并通过引用传递。我相应地更新了帖子。

以上是关于核心数据 - NSFetchedResultsController 错误的主要内容,如果未能解决你的问题,请参考以下文章

更改 NSFetchedResultsController 的 Fetch Request 和重新加载表数据的方法

NSFetchedResultsController 仅按第一个排序描述符排序

NSFetchedResultsController 性能问题

关系的 NSFetchedResultsController 委托回调

如何在 tableView 行选择时更新我的​​ fetchedResultsController?

如何在不通知 NSFetchedResultsController 的情况下更新 NSManagedObject 或 NSManagedObjectContext