我希望我的NSManagedObject监听来自计时器类的通知,该计时器类将每秒发布一次NSnotification。这是更新NSManagedObject中的值所必需的。
问题是由于CD生命周期不受我的控制,似乎我得到了重复的NSNotifications,我发现这是由于NSManagedObject可能存在多个上下文。
我如何在NSManagedObject中可靠地监听此通知?
答案 0 :(得分:3)
这是Core Data工作方式的正常副作用。您正在创建表示相同基础数据的多个对象。他们都注册了相同的通知,所以他们都得到了它。听取这样的通知并不是一个好主意,因为这种重复是系统工作方式的基本部分。
如果应该响应通知的对象都来自同一个托管对象上下文,则有解决方法。例如,要仅在父/子上下文设置中从根上下文中提取对象时侦听通知,请执行类似
的操作if ([[self managedObjectContext] parentContext] == nil) {
...register for notification
}
如果您不使用父/子上下文关系,您可以决定一个特定上下文是其受管对象获取通知的“那个”,并将[self managedObjectContext]
与之比较。
更好的解决方案是回避问题并在其他地方侦听通知 - 或者只是更新计时器回调中的值,而不使用通知。每当计时器触发时,都会更新对象的一个特定实例上的值。通过这种方式,您将知道您在一个对象上的一个地方进行了更改。来自其他上下文的其他实例需要合并更改以获取新值。