2011-11-15 4 views
9

私の問題は似ています:Problem creating NSManagedObject derived classinitWithEntity:なしでNSManagedObjectクラスを使用します。

私はコアデータにNSManagedObjectをセットアップし、そのクラスを持っています。しかし、同じNSObjectクラスを作成する代わりに、NSManagedObjectクラスを使用したいと思いますが、エンティティを作成して保存する必要はありません。私はちょうど私がオブジェクトをコアデータに保存する必要があるときにのみ、配列のために使用したいですinsertEntity:

ストア*ストア= [[ストアの割り当て] init];

それは私に次のエラーを与えている:CoreData: error: Failed to call designated initializer on NSManagedObject class 'Store'

はサブクラスまたは何らかの形のどちらかが、私はちょうどテーブルのために一時的に使用していたオブジェクトを割り当てるためにNSManagedObjectクラス/プロパティを使用することが方法は何ですか?

ありがとうございます。

答えて

24

だけinitWithEntity使用をしては、insertObject呼び出して、ゼロコンテキストを渡す:あなたは準備ができているときあなたのNSMAnagedObjectContextを:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModelClass" inManagedObjectContext:myContext]; 
id object = [[MyModelClass alloc] initWithEntity:entity insertIntoManagedObjectContext:nil]; 
+1

作成するときは、nilを渡していませんエンティティの説明私はコンテキストを作成していない、または作成したくありません。 – runmad

+1

このメソッドの信頼性はどれくらいですか?投票した理由はうまくいくようですが、文書化された方法ですか? –

+0

エンティティの説明を渡して、最終的に挿入したい場合はできるようにしてください。 – amcc

3

MOCを保存しないと、保存前にオブジェクトを削除するだけで、永続化されません。

コアデータは永続化には最適ですが、必須ではありません。実際、MOCはしばしばスクラッチパッドと呼ばれます。オブジェクトを生成してから投げ捨てることができます。

An instance of NSManagedObjectContext represents a single “object space” or scratch pad in an application.

別の解決策は、一時オブジェクト用に別のMOCを持ってして、いずれかの一時MOCを捨てるか、永続的なMOCにMOを移動することです。

この場合、「固定MOC」には- (void)insertObject:(NSManagedObject *)object、「一時MOC」には- (void)deleteObject:(NSManagedObject *)objectとなります。 insertIntoManagedObjectContext:

関連する問題