controllerDidChangeContent:每次在 Core Data 中创建 ManagedObject 时调用

Posted

技术标签:

【中文标题】controllerDidChangeContent:每次在 Core Data 中创建 ManagedObject 时调用【英文标题】:controllerDidChangeContent: called every time I create a ManagedObject in Core Data 【发布时间】:2011-10-20 21:55:35 【问题描述】:

我有一个使用 NSFetchedResultsController 从核心数据存储加载数据的 tableview,我正在实现 controllerDidChangeContent: 以使用新数据(从远程源加载)更新表,但是,委托方法 controllerDidChangeContent: 正在被调用当我创建一个托管对象时,我的理解是只有在我保存消息时才应该调用它:在相应的托管对象上下文中。

是否有设置参数来启用此功能?

我正在下载一个 XML,其中包含许多要插入到 tableview 中的项目,我遇到了崩溃,因为我正在动态创建托管对象并动态附加信息,其中一些需要在表中显示查看单元格。

因此,controllerDidChangeContent: 每次创建新托管对象时都会被调用,但我需要制作表格视图单元格的属性尚未准备好。

任何见解都会很棒。

谢谢。

【问题讨论】:

【参考方案1】:

您不能禁用 NSFetchedResultsController 的这种行为。为了防止这种情况,您可以创建第二个 NSManagedObjectContext,在那里进行所有插入、更改和删除,最后将两个上下文与 mergeChangesFromContextDidSaveNotification: 合并

当您正在下载 XML 文件时,您还应该在后台线程中执行此操作,以防止 UI 被阻止用户输入。

【讨论】:

你可以在Cocoa Is My Girlfriend看到这个例子

以上是关于controllerDidChangeContent:每次在 Core Data 中创建 ManagedObject 时调用的主要内容,如果未能解决你的问题,请参考以下文章