自定义核心数据访问器 - setValue:forKey:与setPrimitiveValue:forKey:

时间:2013-07-26 20:25:04

标签: ios macos core-data

我理解原始setter和非原始setter之间的区别(KVO通知和所有这些)。但是如果我编写自己的setValue:forKey:并调用setPrimitiveValue:forKey:,我是否必须传递SAME值?我阅读了文档,我用Google搜索了,但我根本找不到任何关于此的讨论。

编辑:谢谢,adpalumbo&戴夫FN。你们都同意它不一定是相同的价值。我真正的问题是这个。我写了自己的二传手和吸气剂。然后我调用NSManagedObject上的setter来改变它的原始值,但是由于写入自定义getter的方式,它仍然返回旧值(原始值已被修改。但是如果你在修改之前和之后调用自定义getter ,你会看到没有变化。)在此之后,我在NSManagedObjectContext上调用hasChanges,它返回NO!如果我在上下文中调用save,则根本不会保存更改。任何的想法?正常行为?潜在的核心数据错误?

2 个答案:

答案 0 :(得分:0)

不,您不必将相同的值传递给基元存储。就像非核心数据对象一样,setter可以为实例变量赋值。

当然,当您调用valueForKey:时,您将获得传递给原始商店的内容,而不是最初传递给setValue:forKey:的内容,除非您还覆盖它并返回其他内容。

修改
覆盖核心数据设置器时,请确保使用setPrimitiveValue:forKey:willChangeValueForKey:包裹didChangeValueForKey:

答案 1 :(得分:0)

没有。这是它的用途之一。

您可以在setValue:forKey:中使用复杂对象,并将其序列化为NSData,或在调用setPrimitiveValue:forKey:之前将其缩减为某个引用标识符。