Mogenerator 和 Xcode 4 的优点/缺点

Posted

技术标签:

【中文标题】Mogenerator 和 Xcode 4 的优点/缺点【英文标题】:Mogenerator and Xcode 4 advantages/disadvantages 【发布时间】:2013-08-12 15:25:32 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

正如 David 已经说过的,自定义 Xcode 生成的类文件有很大的缺点 如果您必须在修改文件后重新创建文件,您的更改将会丢失 核心数据实体。

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

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

但是,在类别中添加实例变量是不可能的(至少不是没有 使用诸如“关联对象”之类的 Objective-C 运行时技巧)。同样适用 如果属性由实例变量备份,则添加到属性中。

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

如果您不需要添加实例变量,我看不出有什么大的区别或优势 对于任何一种解决方案。 mogenerator 创建了一些方便的方法和结构 包含属性名称作为字符串,但如果你想使用它是你的选择 与否。

【讨论】:

+1 很好的答案,喜欢您涵盖类别和属性的方式。这也是我眼中mogenerator的主要好处。我对 mongenerator 的主要担忧是依赖于第三方。【参考方案2】:

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

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

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

我向您的 Xcode 项目推荐 adding a target & build phase,它将在构建时生成您的实体类,因此您永远不必记住手动运行 mogenerator。

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

【讨论】:

虽然这增加了对使用代码安装 mogenerator 的任何其他人的依赖。如果您是唯一的开发人员,这不是问题。我更喜欢在更改模型时手动运行它。 @Abizern 绝对可以,这取决于您的团队和环境。您可以将以下内容添加到构建阶段运行脚本中以至少通知:command -v mogenerator >/dev/null 2>&1 || echo >&2 "I require mogenerator but it's not installed. You can install it with 'brew install mogenerator' and then link it with 'sudo ln -s /usr/local/bin/mogenerator /usr/bin/mogenerator'. Aborting."; exit 1; 。或者,您可以检查 mogenerator 的存在,并仅在已安装时运行它。 我认为您不再需要在使用自制软件安装 mogenerator 时手动创建符号链接。我当然不必。 xcodebuild 似乎没有在我的机器上搜索 /usr/local/bin 。符号链接的一种替代方法是修改路径export PATH=$PATH:/usr/local/bin

以上是关于Mogenerator 和 Xcode 4 的优点/缺点的主要内容,如果未能解决你的问题,请参考以下文章

Mogenerator 是不是适用于 Xcode 6?

如何指定 Mogenerator 生成文件的“目标”?

Simperium 和 mogenerator 便利访问器

mogenerator 不生成文件

Coredata 和 Mogenerator,coredata 标志并发问题 EXC_BAD_INSTRUCTION

如何让 mogenerator 识别可转换属性的正确类型?