【问题标题】:Do I need to observe NSManagedObjectContextDidSaveNotification from every NSManagedObjectContext I create?我需要从我创建的每个 NSManagedObjectContext 中观察 NSManagedObjectContextDidSaveNotification 吗?
【发布时间】:2012-02-16 09:41:39
【问题描述】:

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

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(mergeChanges:)
                                             name:NSManagedObjectContextDidSaveNotification
                                           object:self.managedObjectContext];

这在applicationDidFinishLoadingWithOptions: 中发生过一次。但是,NSManagedObjectContext 的文档说:

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

这向我表明 object 参数应该是正在保存的上下文(在我的情况下是背景上下文)而不是主上下文。是这样吗?我需要从我创建的每个 NSManagedObjectContext 中观察 NSManagedObjectContextDidSaveNotification 吗?

【问题讨论】:

    标签: core-data nsmanagedobjectcontext


    【解决方案1】:

    西蒙,

    -addObserver:selector:name:object: 方法中的对象是通知的来源。在你的情况下,它应该是背景NSManagedObjectContext

    您应该观察您创建的每个上下文吗?就像所有事情一样,这取决于。例如,有时您想将上下文用作暂存器,并且永远不会从中保存任何内容。何必去观察呢?通常,您希望观察任何改变持久存储的上下文。

    安德鲁

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多