2009-09-02 13 views
12

私はエンティティオブジェクトを持っています。国名と国コードを持つ国です。これはNSManagedObjectのサブクラスであり、永続ストアにその値を格納するためにコアデータモデルと共に使用しています。管理対象外のNSManagedObjectサブクラスが通常のオブジェクトとして

私は、同じ国オブジェクトが通常のオブジェクトとして使用される場所を持っています。つまり、それを使用して一時的な国名を保存します。私は

[NSManagedObject alloc] init] 

を次のように国を初期化していることについては

の初期化が正常に行われますが、私は、そのオブジェクトに任意のプロパティを設定することはできませんよ。 それで私は探検をしました。その中で、NSManagedObjectのinitはドキュメントごとにサポートされていないことがわかりました。

NSManagedObject CountryをCoreDataと通常のObjectで使用する方法がわかりません。 NSManagedObjectクラスのドキュメントの概要の

答えて

10

2番目の段落:

管理対象オブジェクトはの 名を含むオブジェクト(約 メタデータを提供 エンティティ記述( NSEntityDescriptionのインスタンス)に関連していますオブジェクト が表すオブジェクトと、そのオブジェクトの 属性およびリレーションシップの名前)と、 がオブジェクトグラフに変更された管理オブジェクトコンテキストである とが含まれています。管理対象オブジェクトが データで正しく使用されるように、 が正しく構成されていることが重要です( )。 管理された オブジェクトを直接インスタンス化する場合は、 という指定の初期化子 (initWithEntity:insertIntoManagedObjectContext :)を呼び出す必要があります。

重要:メソッドのドキュメントから

この方法は NSManagedObjectのため 指定イニシャライザです。 管理オブジェクトを initに送信するだけで初期化するべきではありません。

ドキュメントは実際には非常に優れています。

実行可能なCoreDataスタックの外部でNSManagedObjectを使用しないようにする必要はありません。 NSManagedObjectsは、正しく設定されたコアデータ環境内で動作するように明確に設計されています。一時的なインスタンスが必要な場合は、インメモリストアを作成するか、通常のストアで作成し、最初に削除せずに変更を保存しないでください。

+0

ありがとうございます!したがって、通常のオブジェクトに対して行うように初期化することはできません。 永続ストアのNSInMemoryStoreTypeを参照しているので、挿入されたエンティティは揮発性RAMメモリに格納されます。 私は別の質問があります。実際にはクリアされるか、手動でフラッシュする必要がありますか? – raksja

+0

これは、(手動で)消去するか、アプリが終了したときに消去されます... InMemoryStoresは他のストアと同じように機能し、その永続性はメモリ内のみです。 – bbum

2

initWithEntity:insertIntoManagedObjectContext:を使用し、の管理オブジェクトコンテキストnilを渡します。

関連する問題