mergeChangesFromContextDidSaveNotification在NSTableView中简要显示两个上下文

时间:2011-03-31 05:52:03

标签: objective-c core-data cocoa-bindings nsarraycontroller nsmanagedobjectcontext

我有一个managedObjectContext主应用程序,其中绑定NSArrayControllerNSTableView显示NSArrayController的内容。

我定期使用后台线程和第二个managedObjectContext,然后从Web服务器检索最新数据。一旦在后台线程上返回并解析了数据,它就会在mergeChangesFromContextDidSaveNotification之后与主上下文合并。

在通知触发后(我在合并期间假设),该表显示每个项目的重复条目(如果两个上下文同时显示它们的数据,则该条目将是准确的)。几秒钟后,表格会正确显示数据,并删除重复项。

我认为NSArrayController正在观察上下文,因为它正在通过合并并允许表显示合并前和合并后的文件。

是否有一种可接受的方法可以阻止阵列控制器自我更新,直到合并完成?

我可以在IB绑定之外执行此操作并强制更新数组控制器,但我非常确定在绑定或合并过程中我必须做一些稍微错误的操作。

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:1)

在合并两个上下文之前,您很可能不会向表视图发送beginUpdate,因此tableview最终会尝试在其中间状态中显示逻辑表。收到通知后冻结tableview,然后在合并上下文时解冻它。