【发布时间】:2013-07-26 20:25:04
【问题描述】:
我了解原始 setter 和非原始 setter(KVO 通知等)之间的区别。但是,如果我编写自己的 setValue:forKey: 并调用 setPrimitiveValue:forKey:,我是否必须将 SAME 值传递给它?我阅读了文档,我用谷歌搜索了它,但我根本找不到任何关于这个的讨论。
编辑:谢谢,adpalumbo 和 Dave FN。你们都同意它不必是相同的值。我真正的问题是这个。我编写自己的 setter 和 getter。然后我在 NSManagedObject 上调用 setter 以更改其原始值,但由于自定义 getter 的编写方式,它仍然返回旧值(原始值已被修改。但如果您在修改前后调用自定义 getter ,您将看不到任何变化。)。在此之后,我在 NSManagedObjectContext 上调用 hasChanges 并返回 NO!如果我在上下文中调用 save ,则根本不会保存更改。任何的想法?正常行为?潜在的核心数据错误?
【问题讨论】:
-
快速回答您的编辑问题,您是否在设置器中调用
willChangeValueForKey:和didChangeValueForKey:? -
啊……就是这样。我只在遇到问题时添加了 didChangeValueForKey:。添加 willChangeValueForKey: 后,一切正常。这不是核心数据错误,它与返回相同值的自定义 getter 无关。我说我知道 KVO 通知的东西……笑话在我身上!非常感谢 Dave FN!
-
很容易错过其中一个调用,因为它们是为非核心数据对象自动添加的,但在这种情况下不会。我已经用正确的修复更新了我的答案。很高兴能提供帮助。