当我们首次向我们的应用添加Core Data时,我们遵循的教程在我们的应用委托中创建了NSManagedObjectContext
。它建议如果我们在其他线程上使用Core Data,我们应该添加一个观察者来保存线程的上下文时更新我们的主上下文,如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:self.managedObjectContext];
这在applicationDidFinishLoadingWithOptions:
发生一次。但是,NSManagedObjectContext
的文档说:
多个系统框架在内部使用Core Data。如果您注册从所有上下文接收这些通知(通过将nil作为object参数传递给addObserver ...方法),那么您可能会收到难以处理的意外通知。
这告诉我,对象参数应该是被保存的上下文(在我的例子中是背景上下文)而不是主要上下文。是这样的吗?我是否需要从我创建的每个NSManagedObjectContext中观察NSManagedObjectContextDidSaveNotification?
答案 0 :(得分:4)
西蒙,
-addObserver:selector:name:object:
方法中的对象是通知的来源。在您的情况下,它应该是背景NSManagedObjectContext
。
您是否应该观察您创建的每个环境?就像所有事情一样,这取决于。例如,有时您希望将上下文用作暂存器,并且永远不会从中保存任何内容。为什么要费心去观察呢?通常,您希望观察任何改变持久性存储的上下文。
安德鲁