在 NSManagedObjectContextObjectsDidChangeNotification 中 NSUpdatedObjectsKey 和 NSRefreshedObjectsKey 有什么区别

tra*_*per 5 core-data objective-c nsnotifications

文档说;

NSUpdatedObjectsKey 已更新对象集的键。

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

这实际上意味着什么。我只想知道发生了什么变化,所以我需要同时观看这两个键吗?

Jon*_*ose 5

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

NSRefreshedObjectsKey表示该对象是从存储中重新获取的。如果您同时使用多个上下文,那么当您不看时,对象可能已更改。因此,调用refreshObject:mergeChanges:这些对象的上下文将导致它们从存储中重新获取。这并不意味着他们有变化——但他们可能有。

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

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