objective-c - 在 NSManagedObjectContextObjectsDidChangeNotification 中,NSUpdatedObjectsKey 和 NSRefreshedObjectsKey 有什么区别

标签 objective-c core-data nsnotifications

文档说;

NSUpdatedObjectsKey 已更新对象集的键。

NSRefreshedObjectsKey 在此上下文范围内已刷新但未弄脏的对象集的键。

这到底是什么意思。我只想知道发生了什么变化,所以我需要同时观看这两个键吗?

最佳答案

NSUpdatedObjectsKey 表示对象的属性已更改。但是,如果您将一个属性设置为已经存在的相同值,那么即使没有真正改变,它也会显示为 NSUpdatedObjectsKey。 (即 issue.issueId = issue.issueId 将导致对象被“更改”)。

NSRefreshedObjectsKey 表示该对象已从存储中重新获取。如果您同时使用多个上下文,则对象可能在您不注意时发生了变化。因此,在这些对象的上下文中调用 refreshObject:mergeChanges: 将导致它们从存储中重新获取。这并不意味着它们发生了变化——但它们可能发生了变化。

关于使用它们,我不确定您为什么需要它们。自 NSPersistentContainer 以来,我根本没有任何理由使用 NSManagedObjectContextDidSaveNotification,因为 NSPersistentContainer 为我管理所有上下文合并和更新。当我确实管理自己的核心数据堆栈时,我大多只是将整个通知传递给 mergeChangesFromContextDidSaveNotification:。我从未调用过 refreshObject:mergeChanges:,因为我有其他方法可以确保上下文保持同步,所以我从来没有任何 RefreshedObjects。

我不确定是否回答了您的问题,希望对您有所帮助。

关于objective-c - 在 NSManagedObjectContextObjectsDidChangeNotification 中,NSUpdatedObjectsKey 和 NSRefreshedObjectsKey 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42015839/

相关文章:

iphone - 我应该在哪里删除通知观察者?

objective-c - iOS/Objective C 上的科学计算库

ios - 从 objective-c 中的两个不同进程写入资源的最佳实践

objective-c - 如何在 Xcode 的属性构建器中使用自定义字体

ios - 如果目标对象在 Coredata 的另一个源中,则不要删除它

ios - 如何将核心数据添加到实用程序

objective-c - 核心数据中的关系同步

ios - 一对一到一对多的轻迁移

ios - 从控制台发布 NSNotification

ios - 将 Controller 显示为 presentViewController 后 NSNotification 停止工作