【发布时间】:2012-12-14 18:20:20
【问题描述】:
我正在处理用于生成 NSManagedObject 子类的几个核心数据实体,在生成这些类时,我选择了“使用原始数据类型的标量属性”选项。正如预期的那样,在生成的接口中,整数属性被声明为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 页))。 Core Data 自动合成 原始访问器方法(primitiveLength 和 setPrimitiveLength:),但您需要 声明它们以抑制编译器警告。
这一切都说得通,我可以看到很多 SO 帖子询问应该如何编写这些访问器方法,并且有很多很好的答案。
我想不通的是:我在阅读文档中的详细信息之前编写了这段代码并开始使用它,所以我从未编写过任何访问器方法。我的类实现中只有@dynamic 声明。尽管没有编写我应该需要的访问器方法,但代码似乎工作得很好。我已经创建了这个 NSManagedObject 子类的实例。我已向此类的实例发送了setPointsScored: 和pointsScored 消息,并将生成的实例保存到其持久性存储中。一切似乎都正常。
我在这里缺少什么?尽管 Core Data 文档说了什么,是否会生成默认实现?是否存在我需要注意的当前代码不起作用的情况?在编写更多 NSManagedObject 子类之前,我很想了解这里发生了什么......
【问题讨论】:
-
呃...我也不写这些...我认为 CoreData 现在实际上会为您创建它们?
-
现在确实如此,文档有误
标签: objective-c core-data nsmanagedobject