在NSManagedObject中观察NSNotification

时间:2013-11-27 19:35:55

标签: ios core-data nsmanagedobject

我希望我的NSManagedObject监听来自计时器类的通知,该计时器类将每秒发布一次NSnotification。这是更新NSManagedObject中的值所必需的。

问题是由于CD生命周期不受我的控制,似乎我得到了重复的NSNotifications,我发现这是由于NSManagedObject可能存在多个上下文。

我如何在NSManagedObject中可靠地监听此通知?

1 个答案:

答案 0 :(得分:3)

这是Core Data工作方式的正常副作用。您正在创建表示相同基础数据的多个对象。他们都注册了相同的通知,所以他们都得到了它。听取这样的通知并不是一个好主意,因为这种重复是系统工作方式的基本部分。

如果应该响应通知的对象都来自同一个托管对象上下文,则有解决方法。例如,要仅在父/子上下文设置中从根上下文中提取对象时侦听通知,请执行类似

的操作
if ([[self managedObjectContext] parentContext] == nil) {
    ...register for notification
}

如果您不使用父/子上下文关系,您可以决定一个特定上下文是其受管对象获取通知的“那个”,并将[self managedObjectContext]与之比较。

更好的解决方案是回避问题并在其他地方侦听通知 - 或者只是更新计时器回调中的值,而不使用通知。每当计时器触发时,都会更新对象的一个特定实例上的值。通过这种方式,您将知道您在一个对象上的一个地方进行了更改。来自其他上下文的其他实例需要合并更改以获取新值。