2011-05-19 84 views
5

我对Core Data是否为setPrimitiveAttributeName :,与setPrimitiveValue:forKey:形式的NSManagedObject子类生成原始访问器有点困惑,它似乎一致地执行。核心数据原始访问器

我的困惑之源是我使用建模工具(XCode 4)为我的两个实体生成NSManagedSubclasses,据我所知,它们共享相同的元数据设置,但是一个子类可以识别setPrimitiveAttributeName形式,而另一个不(它给了我一个“未找到方法”的编译器警告)。

那么,期待是什么?如果我打开一个新项目,创建一个具有一个属性的实体,并使用建模工具生成必要的NSManagedObject子类代码,我希望它能自动生成更高效的原始访问器形式吗?

回答

2

我一直在遇到类似的问题。虽然运行时generates the primitive accessors,Xcode 4不会生成原语的声明属性,但您必须自己在子类中,每个文档中执行此操作。

我个人为每个实体创建一个类别,并且始终将自定义代码放在那里,这样我就可以随时重新生成MO并且不必复制和粘贴。

您可以在一个类别为此,该接口具有这样的:

@property (nonatomic, retain) NSDate * primitiveLastUsed; 

而且实现了这一点:

@dynamic primitiveLastUsed; 

非常漂亮,使再生在Xcode的MO无痛。

+0

下面是链接文档中最相关的一点:“核心数据为您自动生成访问器方法(和原始访问器方法)....但是您确实需要声明访问器方法或使用Objective-C属性来抑制编译器警告“。 – 2014-02-16 13:28:48

+0

作为一个侧面说明,而不是创建自己的类别,我在这种情况下所做的是使用http://rentzsch.github.io/mogenerator/。 mogenerator根据模型自动生成一个基类。然后你在一个子类中扩展它。生成的基类比库存Xcode类更全面。只有一个例子是头文件自动包含所有基本访问器的声明(如本问题所讨论的)。但这也意味着,只要更改模型而不影响自定义代码,就可以重新生成这些基类。 – 2014-02-16 13:33:54

+0

是的,这是一个很棒的工具,我的解决方案适用于那些不需要帮助工具而需要这种行为的人。感谢您链接此! – logancautrell 2014-03-12 17:13:24