person->phones の関係があると仮定しましょう (もちろん 1 対多)。最初の挿入保存は、私が行っている場所で正しく機能しています:
if (does not exist) {
user = (Member *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:ctx];
} else {
searchObjectsForEntity:@"Person" withPredicate:pred andSortKey:nil andSortAscending:NO andContext:ctx];
これを、挿入または既存のいずれかを行う 1 つの insertNewObjectForEntityForName に置き換える必要がありますか?
次に、phones オブジェクトを作成して Person に追加する必要があります。これは次のように行います。
NSManagedObject* mo=nil;
Phone* phone = (Phone *)[NSEntityDescription insertNewObjectForEntityForName:@"Phone"
inManagedObjectContext:ctx];
[mutableSetOfPhones addObject:mo];
user.phones = phones;
そこで、電話管理オブジェクトの新しいインスタンスを作成し、それをセットに追加して person に追加し、その後保存します。同じコードを使用して Person インスタンスを再保存する場合、つまり、電話の編集/挿入/削除、またはユーザー データへのその他の変更を除いて、これはすべて問題ありません。電話の古いレコードは DB に残り、どの個人にも関連付けられなくなります。
これを行う正しいアプローチは何ですか?ID による編集/削除を確認するには、user.phones を反復処理する必要がありますか? 更新されたレコードを保存する前に、古いインスタンスを削除する必要がありますか (はるかに簡単です)? 推奨されるアプローチは何ですか?おそらく私は完全に間違ったことをしていますか?