我正在使用几个用于生成NSManagedObject子类的Core Data实体,当我生成这些类时,我选择了"使用原始数据类型的标量属性"选项.正如所料,整数属性被声明为int16_t
属性,浮点float
属性在生成的接口中被声明为属性:
@interface TeamStats:NSManagedObject
@property (nonatomic) int16_t pointsScored;
@property (nonatomic) float winPercentage;
@end
Run Code Online (Sandbox Code Playgroud)
在为此接口生成的实现中,我看到这些属性声明为@dynamic
:
@implementation TeamStats
@dynamic pointsScored;
@dynamic winPercentage;
@end
Run Code Online (Sandbox Code Playgroud)
现在,根据Core Data文档,我应该为这些标量属性编写访问器方法,因为Core Data无法为我生成它们:
您可以将属性声明为标量值,但对于标量值,Core Data无法动态生成访问器方法 - 您必须提供自己的实现(请参阅"托管对象访问器方法"(第44页)).Core Data自动合成原始访问器方法(primitiveLength和setPrimitiveLength :),但您需要声明它们以禁止编译器警告.
这一切都是有道理的,我可以看到很多SO帖子询问如何编写这些访问器方法,并提供了很多好的答案.
我无法弄清楚的是:我编写了这段代码并在我阅读文档中的这个细节之前就开始使用它,所以我从未编写任何访问器方法.我只是在我的类实现中有@dynamic声明.尽管没有编写我应该需要的访问器方法,代码似乎工作得很好.我已经创建了这个NSManagedObject子类的实例.我已经发送了此类的实例setPointsScored:
和pointsScored
消息,并将生成的实例保存到其持久性存储中.一切似乎都有效.
我在这里错过了什么?是否存在生成的默认实现,尽管Core Data文档说明了什么?是否会出现我当前的代码无法正常工作的情况?在编写更多NSManagedObject子类之前,我很想了解这里发生了什么......