2

MoGen のコマンド ライン (ビルド フェーズ) は次のとおりです。

mogenerator -m PT1/Data/DataModel.xcdatamodeld -O PT1/Data -–template-var arc=true

これはARCで機能するはずです。ただし、マシンクラスでは次のようなものが得られます

extern const struct ClientInfoAttributes {
    NSString *accountNumber;
    ...
} ClientInfoAttributes;

これにより、「ARCは構造体のObjective-Cオブジェクトを禁止しています」というエラーが発生します。おそらく私はここである種の間違いを犯しました。誰でも私の問題を指摘できますか?

私は iOS7 と XCode 5 のベータ版を使用していますが、これは関係ないようです。関係あるかもしれませんが。

-ボブ

4

2 に答える 2

5

私はARCのmogeneratorに正しいオプションを使用していました。上記の元の質問でわかるように、それは --template-var arc=true です。ただし、このブログ エントリ raptureinvenice.com/getting-started-with-mgenerator からコマンド ラインをコピーしました。このエントリでは、interwebs ソフトウェアが著者の「--」を長いダッシュまたは m ダッシュに変更していました。コピーして貼り付けたところ、正しく見えるダッシュが表示されましたが、そうではありませんでした。現在、mogen ソフトウェアはこれをエラーとしてフラグ付けしていません。黙って無視するだけです。

最終的に -- を最初から再入力すると、正しく機能しました。Mogen は __unsafe_unretained を使用してコンパイラ エラーを防ぎます。

ブログの著者は既にブログ エントリを修正しており、私は今後この種のエラーを報告するために mogen プロジェクトに問題を報告しました。

于 2013-08-23T03:20:56.167 に答える
0

順序が重要だと思います。使用する

mogenerator --template-var arc=true -m PT1/データ/DataModel.xcdatamodeld -O PT1/データ


エラーについては、自明です

ARC は構造体での Objective-C オブジェクトを禁止します

clangのドキュメントで説明されているように

4.3.5 構造体と共用体の所有権修飾フィールド

C の構造体または共用体のメンバーが自明でない所有権修飾型を持つように宣言している場合、そのプログラムは不適切な形式です。

根拠

結果の型は C++ の意味で非 POD になりますが、C は集計の有効期間を管理するための非常に優れた言語ツールを提供しないため、単純にそれらを禁止する方が便利です。これをvoid*または__unsafe_unretainedオブジェクトで管理することは引き続き可能です。

したがって、ドキュメントが示唆するように、これに対する手っ取り早い解決策は、オブジェクトを として宣言すること__unsafe_unretainedです。何かのようなもの:

extern const struct ClientInfoAttributes {
    __unsafe_unretained NSString *accountNumber;
    ...
} ClientInfoAttributes;

とにかく、今後はそのようなオブジェクトのメモリ管理に注意する必要があります。

于 2013-08-23T00:10:07.633 に答える