Core Data中的“原始”访问器是什么?

时间:2011-09-15 07:39:38

标签: objective-c core-data mogenerator

Core Data Programming Guide(我的重点):

  

默认情况下,Core Data动态创建有效的公共原语获取并设置托管对象类的建模属性(属性和关系)的访问器方法。

虽然自从我开始使用Objective-C以来,我一直在愉快地使用Core Data和mogenerator,但我从来没有看过这意味着什么,直到应用程序提交因涉嫌使用私有而被拒绝API。关于生成的setPrimitiveTypeValue:方法的长篇故事,但不是我的问题。

在阅读指南时,我偶然发现了实体属性的公共和原始访问器的概念。另一个引用,但进一步下来:

  

例如,给定具有属性firstName的实体,Core Data会自动生成firstNamesetFirstName:primitiveFirstNamesetPrimitiveFirstName:

什么是原始访问者?是这样你可以直接分配BOOL值,而不是将它包装在NSNumber中吗?如果是这样,为什么mogenerator会遇到生成各种<Attribute>Valueset<Attribute>Value:primitive<Attribute>ValuesetPrimitive<Attribute>Value:访问器的麻烦?

我很困惑,谁能帮助我?


相关问题:

2 个答案:

答案 0 :(得分:10)

据我了解,原始方法执行实际获取和设置,但不发出任何KVC或KVO通知('willAccessValueForKey'等)。 public方法调用原始方法,但在KVO调用中包装调用。因此,从对象外部,您通常会调用公共方法,但如果您因内部原因需要使用对象的属性(例如,验证或派生其他属性),您将使用原始方法来避免触发所有通知。

我欢迎对答案进行任何更正或澄清,因为这是我感兴趣但不完全精通的主题。

答案 1 :(得分:1)

@ jrturton的回答涵盖了有关自定义属性 To-One Relationship 访问者方法的问题,其中public-accessor非常简单。

此外,为了完全支持 To-Many Relationship 访问器,在自定义实现中,公共访问器可能必须结合NSMutableSet方法(unionSet:和minusSet :)来调用原始访问器,必须包含在KVO方法对中(将......做......)。