文档说;
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/