从Core Data Programming Guide(我的重点):
默认情况下,Core Data动态创建有效的公共和原语获取并设置托管对象类的建模属性(属性和关系)的访问器方法。
虽然自从我开始使用Objective-C以来,我一直在愉快地使用Core Data和mogenerator,但我从来没有看过这意味着什么,直到应用程序提交因涉嫌使用私有而被拒绝API。关于生成的setPrimitiveTypeValue:
方法的长篇故事,但不是我的问题。
在阅读指南时,我偶然发现了实体属性的公共和原始访问器的概念。另一个引用,但进一步下来:
例如,给定具有属性
firstName
的实体,Core Data会自动生成firstName
,setFirstName:
,primitiveFirstName
和setPrimitiveFirstName:
。
什么是原始访问者?是这样你可以直接分配BOOL值,而不是将它包装在NSNumber中吗?如果是这样,为什么mogenerator会遇到生成各种<Attribute>Value
,set<Attribute>Value:
,primitive<Attribute>Value
,setPrimitive<Attribute>Value:
访问器的麻烦?
我很困惑,谁能帮助我?
相关问题:
答案 0 :(得分:10)
据我了解,原始方法执行实际获取和设置,但不发出任何KVC或KVO通知('willAccessValueForKey'等)。 public方法调用原始方法,但在KVO调用中包装调用。因此,从对象外部,您通常会调用公共方法,但如果您因内部原因需要使用对象的属性(例如,验证或派生其他属性),您将使用原始方法来避免触发所有通知。
我欢迎对答案进行任何更正或澄清,因为这是我感兴趣但不完全精通的主题。
答案 1 :(得分:1)
@ jrturton的回答涵盖了有关自定义属性和 To-One Relationship 访问者方法的问题,其中public-accessor非常简单。
此外,为了完全支持 To-Many Relationship 访问器,在自定义实现中,公共访问器可能必须结合NSMutableSet方法(unionSet:和minusSet :)来调用原始访问器,必须包含在KVO方法对中(将......做......)。