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