如何保持多个NSManagedContext同步?

时间:2010-02-18 15:02:45

标签: cocoa cocoa-touch core-data

我今晚花了几个小时试图创建一个设置,我有三个托管对象上下文 - 一个附加到我的应用程序的委托,一个NSObject子类负责UITableView更新(通过NSFetchedResultsController)和NSOperation子类中的一个。

我可以通过观察NSOperation来获取从NSManagedObjectContextDidSaveNotification子类到app委托的更改,并在我的主线程上解除mergeChangesFromContextDidSaveNotification:,但是当我尝试要从我的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]'

我很感激任何建议 - 我之前涉及Core Data托管对象上下文的所有设计都是非常简单的1:1同步方案。我提议的甚至可能吗?

1 个答案:

答案 0 :(得分:9)

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

那第三个背景是什么?如果它仅用于表视图更新,那么这是一个糟糕的设计,您应该为整个UI层使用单个上下文。这很可能是解决问题的正确方法,而不是试图保持三种情况在空中处理。

相关问题