Mogenerator和Xcode 4的优点/缺点

我对核心数据集成有点新,并且发现了许多代码示例和教程。 一些build议使用Mogenerator生成实体子类。 这是一个更老的方法?

Xcode允许为没有第三方工具的实体生成子类。 任何人都可以提供的理由,为什么我会select使用Mogenerator的embedded式Xcode工具生成实体的子类?

本文对如何在XCode4中使用mogenerator做了详细的说明,以及为什么要这样做。

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

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

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

另外,mogenerator将包含实体属性的const构造添加到生成的类中,这样就可以避免在谓词中使用硬编码的string。

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

正如David所说,定制Xcode生成的类文件有一个很大的缺点,那就是如果在修改Core Data实体之后必须重新创build文件,那么您的更改将会丢失。

对于方法来说 ,这可以通过在pipe理对象子类的Category中定义方法来解决,例如

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

然而,在类别中添加实例variables是不可能的(至less不能使用诸如“关联对象”之类的Objective-C运行时技巧)。 如果这些属性是由实例variables进行备份的,那么属性也是如此。

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

如果您不需要添加实例variables,那么对于这两种解决scheme我都没有看到很大的区别或优势。 mogenerator创build一些便利的方法,也包含作为string属性名称的结构,但它是你的select,如果你想使用或不。