0

私のアプリではユーザーがデータを編集できますが、保存中に次の 2 つのことが発生する可能性があります。

  1. データの名前が同じままである場合は、オブジェクトを編集済みバージョンとして保存します。つまり、既存のオブジェクトを編集しているだけです。

  2. ただし、名前を変更した場合は、新しいインスタンスが作成され、編集されたデータが元の状態に復元されます。

明らかに、1 は簡単なケースであり、問​​題なく動作しています。しかし、私は 2 を処理するための最良の方法について競合しています。変更された NSManagedObject を DB の新しい行として保存するのはどのように最善ですか?

4

1 に答える 1

1

を「コピー」する明確な方法はありませんNSManagedObject。最も堅牢な方法は、すべてをゼロから再作成することです。

変更されたすべての属性が個別に保存されていることを確認してください (ここでは、それらがさまざまなテキスト フィールドにある、または既存のオブジェクトから変更されていないと想定しています)。編集中のView Controllerが閉じられたときに、この決定(新しいインスタンスかどうか)を行うことができます:

if (![nameTextField.text isEqualToString:object.name]) {
   ObjectClass *newObject = [NSEntityDescription 
       insertNewObjectForEntityForName:@"ObjectClass" 
                inManagedObjectContext:self.managedObjectContext];
   newObject.name = nameTextField.text;
   newObject.attribute1 = oldObject.attribute1;
   // or
   newObject.attribute1 = attribute1TextField.text;
   // do this for all attributes
   [self.managedObjectContext save:nil]; 
}
于 2012-10-24T07:12:52.750 に答える