XCode 4.6 中的 Mogenerator 和 ARC

Posted

技术标签:

【中文标题】XCode 4.6 中的 Mogenerator 和 ARC【英文标题】:Mogenerator and ARC in XCode 4.6 【发布时间】:2013-08-12 17:19:12 【问题描述】:

根据建议作为最佳实践,我刚刚开始使用 Core Data 将 mogenerator 集成到应用程序项目中。我添加了以下构建脚本,并带有一个支持 ARC 的标志。

mogenerator -m FavesDataModel.xcdatamodeld/FavesDataModel.xcdatamodel --template-var arc=true

脚本成功构建了所有必要的类和子类。当时,我将所有生成的文件复制到我的项目中。最初,我得到了一个干净的成功构建。但是,当尝试另一个构建(不进行任何更改)时,它会失败并出现以下 ARC 错误:

ARC forbids Objective-C objects in structs or unions

错误发生在带有下划线的文件中。有趣的是,当构建脚本按如下方式构建文件时:

extern const struct FavoriteAttributes 
    __unsafe_unretained NSString *maxCFS;
    __unsafe_unretained NSString *maxFeet;
    __unsafe_unretained NSString *minCFS;
    __unsafe_unretained NSString *minFeet;
    __unsafe_unretained NSString *stationIdentifier;
    __unsafe_unretained NSString *stationRealName;
    __unsafe_unretained NSString *stationState;
 FavoriteAttributes;

但是,在成功构建之后,XCode 会删除 __unsafe_unretained 属性。

在开启 ARC 的情况下使用 mogenerator 是否存在已知问题?任何解决方案或解决方法的想法?谢谢! V

【问题讨论】:

__unsafe_unretained 不应该在生成的文件中删除,这听起来很奇怪...... 模板变量在解决 ARC 问题时是正确的。您确定 Xcode 使用的是正确生成的类文件吗?您的 mogenerator 命令会将它们放在项目根目录中。 【参考方案1】:

尝试从构建脚本中删除 --template-var arc=true。

然后在 XCode 中,项目属性,编译源,设置问题文件具有以下标志

fno-objc-arc

这将只对那些文件关闭 ARC。

【讨论】:

每次生成新文件时都必须永远添加此参数。

以上是关于XCode 4.6 中的 Mogenerator 和 ARC的主要内容,如果未能解决你的问题,请参考以下文章

Mogenerator 和 Xcode 4 的优点/缺点

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

Xcode 4.6 中的搜索路径混淆

plist 文件中的 Xcode 4.6 本地化

如何让我在 xcode 4.6 ios6 中的表格视图正常工作?

如何为 iOS 6 xcode 4.6 制作任何时间动画?