Core data 我是否需要从我创建的每个NSManagedObjectContext中观察NSManagedObjectContextDidSaveNotification?

Core data 我是否需要从我创建的每个NSManagedObjectContext中观察NSManagedObjectContextDidSaveNotification?,core-data,nsmanagedobjectcontext,Core Data,Nsmanagedobjectcontext,当我们第一次向应用程序添加核心数据时,我们遵循的教程在我们的应用程序委托中创建了一个NSManagedObjectContext。它建议,如果我们在其他线程上使用核心数据,我们应该在保存线程上下文时添加一个观察者来更新主上下文,如下所示: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChanges:)

当我们第一次向应用程序添加核心数据时,我们遵循的教程在我们的应用程序委托中创建了一个
NSManagedObjectContext
。它建议,如果我们在其他线程上使用核心数据,我们应该在保存线程上下文时添加一个观察者来更新主上下文,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(mergeChanges:)
                                             name:NSManagedObjectContextDidSaveNotification
                                           object:self.managedObjectContext];
这在
ApplicationIDFinishLoadingWithOptions:
中发生一次。但是,NSManagedObjectContext的文档说明:

一些系统框架在内部使用核心数据。如果注册以从所有上下文接收这些通知(通过将nil作为对象参数传递给addObserver…方法),则可能会收到难以处理的意外通知

这向我建议对象参数应该是正在保存的上下文(在我的例子中是背景上下文),而不是主上下文。是这样吗?我是否需要从我创建的每个NSManagedObjectContext中观察NSManagedObjectContextDidSaveNotification?

Simon

-addObserver:selector:name:object:
方法中的对象是通知的源。在您的情况下,它应该是后台
NSManagedObjectContext

你应该观察你创造的每一个环境吗?就像所有事情一样,这要视情况而定。例如,有时您希望使用上下文作为草稿行,并且永远不会保存其中的任何内容。为什么要费心去观察呢?通常,您希望观察任何改变持久存储的上下文

安德鲁

西蒙

-addObserver:selector:name:object:
方法中的对象是通知的源。在您的情况下,它应该是后台
NSManagedObjectContext

你应该观察你创造的每一个环境吗?就像所有事情一样,这要视情况而定。例如,有时您希望使用上下文作为草稿行,并且永远不会保存其中的任何内容。为什么要费心去观察呢?通常,您希望观察任何改变持久存储的上下文

安德鲁