2009-06-02 23 views
7

これは愚かな質問でなければならないと確信していますが、インターウェーブを精査して答えを見つけることができません。ジェネレーションギャップパターンの使用については、モデルから生成されたNSManagedObjectサブクラスがあり、そのサブクラスを継承して一時的なプロパティと動作を追加するという話がたくさんあります。これは、永続モデルを変更した場合、独自のコードを上書きすることなく、ベースファイルを再生成することができるという利点があります。CoreData - NSManagedObject(ジェネレーションギャップパターン)のサブクラスのサブクラスを作成する方法

私はNSManagedObjectから派生した基本CardMOオブジェクトを持っています。私はこれをサブクラス化して自分自身のCardオブジェクトを作ります。

私の質問は、管理対象のCardオブジェクトをどのように作成するのですか?

私が試した:

Card* card = [NSEntityDescription insertNewObjectForEntityForName:@"CardMO" inManagedObjectContext:moc]; 

をしかし、このオブジェクトは本当にカードではない、と私は、このオブジェクト上のカードのメソッドを呼び出すために行くときに、もちろん例外はあります。

私は(initがちょうど[スーパーのinit]を呼び出す)のalloc/initでカードを作成しようとしたし、このようmanagedObjectContextに追加しました:

[moc insertObject:(CardMO*)card]; 

これは、「私の不可解なエラーが発生します[スーパーのinit]の代わりに、NSManagedObjectクラスのカード」に指定イニシャライザを呼び出すことができませんでした」[[AIStoreManager sharedAIStoreManager] .managedObjectContext:CardMO "inManagedObjectContext

を私は@ NSEntityDescription insertNewObjectForEntityForName]を呼び出すことによって、これを変更しようとしました"。この場合、私が戻すオブジェクトはCardMOであり、カードメソッドを呼び出すことはできません。

私は何をしていますか?

そして、私はこの障害を乗り越えた後、XMLから他のカードオブジェクトを作成し、それをNSManagedObjectsに変換する必要があります。私はAppleのXMLReaderSAXに基づくコードを使用しています - 私はこのコードをXMLの塊にしています。それは私に多くのCardオブジェクトの配列を返します。後でこれらのオブジェクトをマネージオブジェクトコンテキストに追加することはできますか?それとも、XMLReaderSAXに入り、オブジェクトの作成方法を変更する必要がありますか?

私はiPhoneアプリを3.0に書いていますが、これはCore Data for 10.5でも同じです。

答えて

8

Sussed it!

データモデルでは、エンティティのクラス名は、私の場合、最も派生したクラスの名前でなければなりません。問題は、新しいファイルを生成する前に、名前をCardMOに変更することを忘れないようにすることです。

これは人々がmogeneratorを使用する理由です。

+0

パーサーから管理対象オブジェクトを作成するには、アップルから派生したコードにアクセスして、オブジェクト作成コードを上記のように変更する必要がありました。それは正常に働いた。 –

0

なぜNSCodingを使用しないのですか?次に、XMLやJSON、またはアプリケーションの外部にオブジェクトを記述するその他の手段をサポートすることができます。

関連する問題