我需要从我创建的每个 NSManagedObjectContext 中观察 NSManagedObjectContextDidSaveNotification 吗?

Posted

技术标签:

【中文标题】我需要从我创建的每个 NSManagedObjectContext 中观察 NSManagedObjectContextDidSaveNotification 吗?【英文标题】:Do I need to observe NSManagedObjectContextDidSaveNotification from every NSManagedObjectContext I create? 【发布时间】: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 参数应该是正在保存的上下文(在我的情况下是背景上下文)而不是主上下文。是这样吗?

【问题讨论】:

【参考方案1】:

西蒙,

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

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

安德鲁

【讨论】:

以上是关于我需要从我创建的每个 NSManagedObjectContext 中观察 NSManagedObjectContextDidSaveNotification 吗?的主要内容,如果未能解决你的问题,请参考以下文章

CoreData不删除对象一对多实体

使用 reactjs(非本机)从我的网站创建一个移动应用程序

jslint - 不要在循环中创建函数

如何列出 NSManagedObject 的变量

拖放 - 从我的模型创建一个 NSItemProvider

绑定两个 ForEach 循环以更新每个项目单元格