KVO方法在NSManagedObject属性上触发两次

时间:2016-12-06 00:49:26

标签: swift core-data nsmanagedobject key-value-observing

正如标题所说,我正在观察带有KVO的NSManagedObject属性。方法override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)触发两次:第一次为属性分配新值,第二次是在CD中保存上下文时。我在设置属性值后立即这样做。我在代码中遇到了另一个问题,因为我的问题是为什么会发生这种情况,以及正确的方法(设置属性,保存上下文并触发方法一次)。也许我不应该立即保存上下文?

1 个答案:

答案 0 :(得分:1)

我相信我的上述评论(直觉)实际上是正确的。它似乎没有文档记录,但在所有平台上观察到mergeChangesFromContextDidSaveNotification(即当你的MOC保存时)会触发所有属性的刷新。 cf:KVO notifications after mergeChangesFromContextDidSaveNotification

关于如何处理行为的建议:通常,kvo代码应该是幂等且快速的,正是因为它可以经常被调用,即当设置了密钥路径时。