ios - 在 NSManagedObject 中观察 NSNotification

标签 ios core-data nsmanagedobject

我希望我的 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/

相关文章:

ios - 在 Swift 中,如何将格式化的 Int 值插入到 String 中?

iphone - 启用 iTunes 文件共享时隐藏 Core Data sqlite 文件

iphone - 有没有办法实例化 NSManagedObject 而不插入它?

ios - 多线程核心数据-NSManagedObject无效

ios - Swift 函数调用列表不正确的参数类型

ios - Firebase 推送通知操作

当我点击导航栏时,来自栏按钮的 ios 操作表不会关闭

swift - 使用 Swift 从 Core Data 获取数据并显示在 UITextFields 中

ios - 在事件发生后访问另一个 View Controller 的属性

ios - NSManaged 对象 initWithCoder 错误