Cocoa 如何保持多个NSManagedContext';同步吗?

Cocoa 如何保持多个NSManagedContext';同步吗?,cocoa,cocoa-touch,core-data,Cocoa,Cocoa Touch,Core Data,今晚我花了几个小时试图创建一个设置,其中我有三个托管对象上下文-一个连接到我的应用程序的委托,一个在负责UITableView更新的NSFetchedResultsController子类中,一个在NSOperation子类中 通过观察NSManagedObjectContextDidSaveNotification,并在主线程上启动mergeChangesFromContextDidSaveNotification:,我可以使从NSOperation子类到app委托的更改顺利通过,但是,当我尝

今晚我花了几个小时试图创建一个设置,其中我有三个托管对象上下文-一个连接到我的应用程序的委托,一个在负责
UITableView
更新的
NSFetchedResultsController
子类中,一个在
NSOperation
子类中

通过观察
NSManagedObjectContextDidSaveNotification
,并在主线程上启动
mergeChangesFromContextDidSaveNotification:
,我可以使从
NSOperation子类到app委托的更改顺利通过,但是,当我尝试从我的
UITableView
数据源执行相同的操作时,我得到以下异常:

2010-02-19 02:00:39.750 MyApp[44687:207] Serious application error.  Exception was caught during Core Data change processing: *** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0] with userInfo (null)
2010-02-19 02:00:39.750 MyApp[44687:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0]'

如果有任何建议,我将不胜感激——我以前所有涉及核心数据管理对象上下文的设计都是非常简单的1:1同步场景。我的建议可能吗?

一个更好的问题是,为什么要尝试保持多个上下文的同步。有两个,一个用于主应用程序使用,一个用于导入,这是有意义的,但是导入上下文不需要保持同步,并且您已经知道如何从导入上下文中提供主上下文


那么,第三种情况是什么呢?如果只是为了表视图更新,这是一个糟糕的设计,您应该为整个UI层使用单个上下文。这很可能是解决问题的正确方法,而不是试图让三个上下文在空中摇摆不定。

您使用过调试器吗?关于你试图在NSArray中插入nil,它告诉了你什么?具体地说,中断objc_exception_throw并找出导致此问题的部分代码。Joshua,它实际上来自:-(void)controller:(NSFetchedResultsController*)controller didChangeObject:(id)一个对象atIndexPath:(NSIndexPath*)indexath for changeType:(NSFetchedResultsChangeType)type newIndexath:(NSIndexPath*))newIndexPath{NSArray*paths=[NSArray arrayWithObject:newIndexPath];显然NSArray不能用{0,0}的indexPath初始化。仍在研究发生这种情况的原因。这是我需要听到的答案。出于某种原因,我说服了自己(凌晨2点)我需要另一个托管对象上下文。我只是太贪婪了!一如既往地谢谢你,Marcus!