核心数据原始访问器
Posted
技术标签:
【中文标题】核心数据原始访问器【英文标题】:Core Data Primitive Accessors 【发布时间】:2011-05-19 11:06:08 【问题描述】:我有点困惑,Core Data 是否以 setPrimitiveAttributeName: 形式为 NSManagedObject 子类生成原始访问器,而与它似乎始终如一的形式 setPrimitiveValue: forKey: 相比。
我困惑的根源是我使用建模工具 (XCode 4) 为我的两个实体生成 NSManagedSubclasses,据我所知,它们共享相同的元数据设置,但一个子类识别 setPrimitiveAttributeName形式,而另一个没有(它给了我一个“找不到方法”编译器警告)。
那么,期望是什么?如果我打开一个新项目,创建一个具有一个属性的实体,并使用建模工具生成必要的 NSManagedObject 子类代码,我是否应该期望它自动生成更有效的原始访问器形式?
【问题讨论】:
【参考方案1】:我也遇到过类似的问题。虽然运行时generates the primitive accessors,Xcode 4 不会为原语生成声明的属性,但您必须根据文档在子类中自己执行此操作。
我亲自为每个实体创建一个类别,并始终将我的自定义代码放在那里,这样我就可以随时重新生成 MO,而不必复制和粘贴。
你可以在一个类别中这样做,界面有这个:
@property (nonatomic, retain) NSDate * primitiveLastUsed;
而实现是这样的:
@dynamic primitiveLastUsed;
非常漂亮,让从 Xcode 重新生成 MO 变得轻松。
【讨论】:
这里是链接文档中最相关的一点:“Core Data 自动为您生成访问器方法(和原始访问器方法)......但是您确实需要声明访问器方法或使用目标-C 属性来抑制编译器警告。" 作为旁注,与其创建我自己的类别,我在这种情况下所做的是使用 rentzsch.github.io/mogenerator 。 mogenerator 根据模型自动生成基类。然后你在一个子类中扩展它。生成的基类比普通的 Xcode 类要全面得多。仅一个示例就是头文件自动包含所有原始访问器的声明(如本问题所述)。但这也意味着您可以在更改模型时重新生成这些基类,而不会影响您的自定义代码。 是的,这是一个很棒的工具,我的解决方案是针对那些想要这种行为而不需要辅助工具的人。感谢您链接这个!以上是关于核心数据原始访问器的主要内容,如果未能解决你的问题,请参考以下文章