私はコア データの統合に多少慣れていないため、多くのコード サンプルとチュートリアルを見つけました。Mogenerator を使用してエンティティ サブクラスを生成することを提案する人もいます。これは古いアプローチですか?
Xcode を使用すると、サードパーティのツールを使用せずにエンティティのサブクラスを生成できます。エンティティのサブクラスを生成するために、組み込みの Xcode ツールではなく Mogenerator を使用することを選択する理由を誰か教えてもらえますか?
私はコア データの統合に多少慣れていないため、多くのコード サンプルとチュートリアルを見つけました。Mogenerator を使用してエンティティ サブクラスを生成することを提案する人もいます。これは古いアプローチですか?
Xcode を使用すると、サードパーティのツールを使用せずにエンティティのサブクラスを生成できます。エンティティのサブクラスを生成するために、組み込みの Xcode ツールではなく Mogenerator を使用することを選択する理由を誰か教えてもらえますか?
インスタンス変数 (またはインスタンス変数によってバックアップされたプロパティ) を管理対象オブジェクトのサブクラスに追加する必要がある場合、Mogenerator には真の利点があります。
David が既に述べたように、Xcode で生成されたクラス ファイルをカスタマイズすると、Core Data エンティティを変更した後にファイルを再作成する必要がある場合、変更が失われるという大きな欠点があります。
メソッドの場合、これは、管理対象オブジェクトのサブクラスのカテゴリでメソッドを定義することで解決できます。
@interface MyEntity (MyMethods)
- (NSString *)myMethod;
@end
ただし、カテゴリにインスタンス変数を追加することはできません (少なくとも、「関連付けられたオブジェクト」などの Objective-C ランタイム トリックを使用しないと不可能です)。インスタンス変数によってバックアップされている場合、同じことがプロパティにも当てはまります。
そのため、その要件がある場合は、別のクラス ファイルで mogenerator を使用すると非常に有利です。上書きされないメソッド、プロパティ、またはインスタンス変数を「Human」クラスに追加できます。
インスタンス変数を追加する必要がない場合、どちらのソリューションにも大きな違いや利点はありません。mogenerator はいくつかの便利なメソッドを作成し、プロパティ名を文字列として含む構造体も作成しますが、それを使用するかどうかはあなたの選択です。
この記事では、XCode4 で mogenerator を使用する方法と、使用する理由について詳しく説明しています。
アプリの開発では、生成されたエンティティ クラス (NSManagedObject
サブクラス) に独自のカスタム メソッドを追加する可能性があります。しかし、実行xctool
してクラスを生成すると、すべての変更が上書きされて失われます!
Mogenerator は、エンティティごとに 1 組のクラスを生成します。変更を加えたときにモデルから再生成できる 1 つの安定した「マシン」クラスと、編集してメソッドを追加できるマシン クラスの 1 つの「人間」サブクラスです。
ビルド時にエンティティ クラスを生成するターゲット & ビルド フェーズを Xcode プロジェクトに追加することをお勧めします。これにより、mogenerator を手動で実行することを覚えておく必要がなくなります。
さらに、mogenerator はエンティティの属性を含む const 構造体を生成されたクラスに追加するため、述語などでハードコードされた文字列を使用することを避けることができます。