1

我对核心数据集成有些陌生,并且发现了许多代码示例和教程。有些人建议使用 Mogenerator 来生成实体子类。这是一种较旧的方法吗?

Xcode 允许在没有第三方工具的情况下为实体生成子类。谁能提供为什么我会选择使用 Mogenerator 而不是嵌入式 Xcode 工具来生成实体子类的原因?

4

2 回答 2

5

如果您必须将实例变量 (或由实例变量备份的属性)添加到托管对象子类, Mogenerator 具有真正的优势。

正如 David 已经说过的,自定义 Xcode 生成的类文件有一个很大的缺点,即如果您必须在修改 Core Data 实体后重新创建文件,您的更改就会丢失。

对于方法,这可以通过在托管对象子类的类别中定义方法来解决,例如

@interface MyEntity (MyMethods)
- (NSString *)myMethod;
@end

然而,在一个类别中添加实例变量是不可能的(至少在不使用诸如“关联对象”之类的 Objective-C 运行时技巧的情况下是不可能的)。如果属性由实例变量支持,这同样适用于属性。

因此,如果您有这个要求,将 mogenerator 与单独的类文件一起使用是一个真正的优势。您可以将任何不会被覆盖的方法、属性或实例变量添加到“人类”类。

如果您不需要添加实例变量,我认为这两种解决方案都没有太大的区别或优势。mogenerator 创建了一些方便的方法以及包含属性名称作为字符串的结构,但您可以选择是否使用它。

于 2013-08-12T16:55:09.003 回答
3

本文详细解释了如何将mogenerator与 XCode4 一起使用,以及为什么要这样做。

在开发应用程序时,您可能会将自己的自定义方法添加到生成的实体类(NSManagedObject子类)中。但是当您运行xctool生成类时,您的所有更改都将被覆盖并丢失!

Mogenerator 为每个实体生成一对类——一个稳定的“机器”类,可以在您进行更改时从模型中重新生成,以及一个机器类的“人类”子类,您可以对其进行编辑和添加方法。

我建议在您的 Xcode 项目中添加一个目标和构建阶段,这将在构建时生成您的实体类,因此您永远不必记住手动运行 mogenerator。

此外,mogenerator 将包含实体属性的 const 结构添加到生成的类中,因此您可以避免在谓词等中使用硬编码字符串。

于 2013-08-12T15:38:50.747 回答