MoGen的命令行(构建阶段)是
mogenerator -m PT1/Data/DataModel.xcdatamodeld -O PT1/Data -–template-var arc=true
这应该适用于ARC。但是在机器类中,我得到类似
的东西extern const struct ClientInfoAttributes {
NSString *accountNumber;
...
} ClientInfoAttributes;
这给出了错误“ARC禁止struct中的Objective-C对象”。据推测,我在这里犯了一些错误。有人可以指出我的问题吗?
我正在使用iOS7和XCode 5测试版,但这似乎与此无关。但它可能是相关的。
-Bob
答案 0 :(得分:5)
我正在为ARC的mogenerator使用正确的选项。正如您在我原来的问题中看到的那样,它是--template-var arc = true。但是,我从此博客条目raptureinvenice.com/getting-started-with-mogenerator复制了命令行。在这个条目中,interwebs软件已将作者的“ - ”更改为长划线或短划线。当我复制和粘贴时,我得到了一个看起来正确但但没有的短划线。 mogen软件目前不会将此标记为错误。它只是默默地忽略了它。
当我最终重新输入 - 从头开始它正常工作。 Mogen使用__unsafe_unretained来防止编译器错误。
博客作者已经修复了博客条目,我已经向mogen项目提出了一个问题,即将来报告此类错误。
答案 1 :(得分:0)
我怀疑订单很重要。使用
mogenerator --template-var arc = true -m PT1 / Data / DataModel.xcdatamodeld -O PT1 / Data
关于错误,它是不言自明的
中所述ARC禁止struct
中的Objective-C对象
4.3.5结构和工会的所有权合格领域
如果程序声明C结构或联合的成员具有非平凡的所有权限定类型,则该程序格式不正确。
原理
在C ++意义上,结果类型将是非POD,但C不会为我们提供非常好的语言工具来管理聚合的生命周期,因此简单地禁止它们会更方便。仍然可以使用
void*
或__unsafe_unretained
对象来管理它。
因此,正如文档所示,快速而肮脏的解决方案是将对象声明为__unsafe_unretained
。类似的东西:
extern const struct ClientInfoAttributes {
__unsafe_unretained NSString *accountNumber;
...
} ClientInfoAttributes;
无论如何要注意从现在起你必须为这样的对象处理内存管理。