我正在使用几个用于生成NSManagedObject子类的Core Data实体,当我生成这些类时,我选择了“使用原始数据类型的标量属性”选项。正如所料,整数属性被声明为int16_t
属性,浮点属性在生成的接口中被声明为float
属性:
@interface TeamStats:NSManagedObject
@property (nonatomic) int16_t pointsScored;
@property (nonatomic) float winPercentage;
@end
在为此接口生成的实现中,我看到使用@dynamic
声明的这些属性:
@implementation TeamStats
@dynamic pointsScored;
@dynamic winPercentage;
@end
现在,根据Core Data文档,我应该为这些标量属性编写访问器方法,因为Core Data无法为我生成它们:
您可以将属性声明为标量值,但对于标量值,Core Data则不能 动态生成访问器方法 - 您必须提供自己的实现(请参阅 “托管对象访问器方法”(第44页))。核心数据自动合成 原始访问器方法(primitiveLength和setPrimitiveLength :),但您需要 声明它们以禁止编译器警告。
这一切都有道理,我可以看到很多SO帖子询问如何编写这些访问器方法,并提供了很多好的答案。
我无法弄清楚的是:我编写此代码并在我阅读文档中的详细信息之前开始使用它,因此我从未编写任何访问器方法。我只是在我的类实现中有@dynamic声明。尽管没有编写我应该需要的访问器方法,代码似乎工作得很好。我已经创建了这个NSManagedObject子类的实例。我已经向此类的实例发送了setPointsScored:
和pointsScored
消息,并将生成的实例保存到其持久性存储中。一切似乎都有效。
我在这里缺少什么?是否存在生成的默认实现,尽管Core Data文档说明了什么?是否会出现我当前的代码无法正常工作的情况?在编写更多NSManagedObject子类之前,我很想了解这里发生了什么......
答案 0 :(得分:5)
为原始数据类型创建标量访问器是Xcode 4引入的一个功能,但显然没有详细记录。它在WWDC 2011 Session视频中提到
根据这些会话的信息,标量访问器避免了构造NSNumber
对象的开销,因此它们比“核心数据编程指南”中显示的实现更有效。
所以回答你的问题:自动生成标量属性的默认访问器。 “核心数据编程指南”在此功能方面已经过时。