2009-09-28 15 views
8

コンテキスト外で管理対象オブジェクトを初期化する方法はありますか?私は基本的に最初にコンテキストの外部に管理オブジェクトを割り当て/初期化しようとしています。次に、オブジェクトを挿入して、既存の管理オブジェクトコンテキストを使用してデータストアに挿入したい場合は、iPhone Core Data:コンテキストなしで管理オブジェクトを初期化する

これは可能ですか、それともコアデータの使用目的に反しますか?

答えて

5

管理対象オブジェクトはコンテキストによって「管理」されているため、実際にはそれらをインスタンス化することはできません。ただし、コンテキストで管理対象オブジェクトをインスタンス化しても、コンテキストを使用すると、インスタンスを作成するためにコンテキストを使用して同じ効果を得て、実際にオブジェクトを使用することを理解した後で保存するだけです。

+0

私はちょうどこのようなケースであることを確認したかった、できるだけ多く考え出し。ダニエルありがとう。 – WillF

2

いいえ、NSManagedObjectContextの外でNSManagedObjectのインスタンスをインスタンス化することはできません(ただし、できますが、悪いことが起こり、プログラムが期待どおりに機能しないことはほとんどありません)。ただし、NSInMemoryPersistentStore -backed NSManagedObjectContextを作成することはできます。これは少しだけセットアップが多く(あまりない)、インメモリストアをdeallocするとすべてが消えます。その間、Core Dataのオブジェクトグラフ管理のメリットをすべて得ることができます。

0

多分あなたが撮影しているのは複数の文脈です。追加の「スクラッチパッド」コンテキストを作成して、変更内容をメインコンテキストにマージすることができます。 AppleのiPhoneサンプルプロジェクトの1つが、この正確なことを成し遂げています。あなたはそれを見つけるために開発センターにログインする必要があります。この質問時につまずく人のため

1

が、ここで私はOPはおそらくのために何が起こっていたか、達成方法は次のとおりです。

NSManagedObjectContext *moc = AppDelegate.managedObjectContext; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModel" 
    inManagedObjectContext:moc]; 
MyModel *model = [[MyModel alloc] initWithEntity:entity 
    insertIntoManagedObjectContext:nil]; 
+1

デフォルトのNSConfinementConcurrencyType - NSPrivateQueueConcurrencyTypeまたはNSMainQueueConcurrencyType以外のものを使用してMOCを作成すると、プロパティがnil'edになるという問題が発生する可能性がありますので、この使用には注意が必要です – stevesliva

+0

また、awakeFromInsertは呼び出されません。 – stevesliva

+0

'' 'awakeFromInsert'''は後で' '' [moc insertObject:model]; ''によってMOCに追加した場合に呼び出されます。 – etipton

関連する問題