1. ホーム
  2. objective-c

[解決済み] 一時的なNSManagedObjectインスタンスを処理する方法とは?

2023-04-22 21:37:33

質問

私は NSManagedObject インスタンスを作成し、それらを使って何らかの処理をした後、それらをゴミ箱に捨てるか、sqlite dbに保存する必要があります。問題なのは、私は NSManagedObject に接続されていない NSManagedObjectContext に接続されておらず、これは、DB内のオブジェクトのいくつかが必要ないと判断した後に、何らかの方法で片付けなければならないことを意味します。

これに対処するため、同じコーディネータを使ってインメモリストアを作成し、そこに一時的なオブジェクトを置くために assignObject:toPersistentStore. さて、これらの一時的なオブジェクトが、両方のストアに共通のコンテキストからフェッチしたデータに到達しないようにするにはどうしたらよいでしょうか。それとも、そのようなタスクのために別のコンテキストを作成する必要がありますか?


UPDです。

現在、インメモリストアのために別のコンテキストを作ろうと思っています。あるコンテキストから別のコンテキストにオブジェクトを移動するにはどうすればいいのでしょうか?context insertObject:]を使うだけでいいのでしょうか?この設定で大丈夫なのでしょうか?オブジェクトのグラフから1つのオブジェクトを挿入すると、グラフ全体がコンテキストに挿入されるのでしょうか?

どのように解決するのですか?

注意してください。 この回答は 非常に 古いものです。完全な歴史については、コメントをご覧ください。その後、私の推奨は変更され、もはや関連性のない NSManagedObject インスタンスの使用は推奨しません。現在の私の推奨は、一時的な子 NSManagedObjectContext インスタンスを使用することです。

オリジナルの回答

これを行う最も簡単な方法は、あなたの NSManagedObject インスタンスを作成し、関連する NSManagedObjectContext .

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:myMOC];
NSManagedObject *unassociatedObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];

そして、保存するときは

[myMOC insertObject:unassociatedObject];
NSError *error = nil;
if (![myMoc save:&error]) {
  //Respond to the error
}