我对核心数据集成有些陌生,并且发现了许多代码示例和教程。有些人建议使用 Mogenerator 来生成实体子类。这是一种较旧的方法吗?
Xcode 允许在没有第三方工具的情况下为实体生成子类。谁能提供为什么我会选择使用 Mogenerator 而不是嵌入式 Xcode 工具来生成实体子类的原因?
我对核心数据集成有些陌生,并且发现了许多代码示例和教程。有些人建议使用 Mogenerator 来生成实体子类。这是一种较旧的方法吗?
Xcode 允许在没有第三方工具的情况下为实体生成子类。谁能提供为什么我会选择使用 Mogenerator 而不是嵌入式 Xcode 工具来生成实体子类的原因?
如果您必须将实例变量 (或由实例变量备份的属性)添加到托管对象子类, Mogenerator 具有真正的优势。
正如 David 已经说过的,自定义 Xcode 生成的类文件有一个很大的缺点,即如果您必须在修改 Core Data 实体后重新创建文件,您的更改就会丢失。
对于方法,这可以通过在托管对象子类的类别中定义方法来解决,例如
@interface MyEntity (MyMethods)
- (NSString *)myMethod;
@end
然而,在一个类别中添加实例变量是不可能的(至少在不使用诸如“关联对象”之类的 Objective-C 运行时技巧的情况下是不可能的)。如果属性由实例变量支持,这同样适用于属性。
因此,如果您有这个要求,将 mogenerator 与单独的类文件一起使用是一个真正的优势。您可以将任何不会被覆盖的方法、属性或实例变量添加到“人类”类。
如果您不需要添加实例变量,我认为这两种解决方案都没有太大的区别或优势。mogenerator 创建了一些方便的方法以及包含属性名称作为字符串的结构,但您可以选择是否使用它。
本文详细解释了如何将mogenerator与 XCode4 一起使用,以及为什么要这样做。
在开发应用程序时,您可能会将自己的自定义方法添加到生成的实体类(NSManagedObject
子类)中。但是当您运行xctool
生成类时,您的所有更改都将被覆盖并丢失!
Mogenerator 为每个实体生成一对类——一个稳定的“机器”类,可以在您进行更改时从模型中重新生成,以及一个机器类的“人类”子类,您可以对其进行编辑和添加方法。
我建议在您的 Xcode 项目中添加一个目标和构建阶段,这将在构建时生成您的实体类,因此您永远不必记住手动运行 mogenerator。
此外,mogenerator 将包含实体属性的 const 结构添加到生成的类中,因此您可以避免在谓词等中使用硬编码字符串。