iPhoneアプリでコアデータを使用しています。NSManagedObjectから派生し、次のプロパティを使用する単純なクラスFriendを作成しました。
@property (nonatomic, retain) NSString *name;
このクラスのインスタンスをコンテキストに追加および削除することができ、変更も永続的です。
ここで、フレンドインスタンスを更新/変更して、再度永続化する必要があります。
しかし、これはうまくいかないようです。
これが私の問題を示すコードの一部です:
// NSManagedObjectContext *context = < my managed context>
// NSFetchedResultsController *nsfrc= < my fetched result controller>
NSEntityDescription *entity = [nsfrc entity];
NSManagedObject *newManagedObject = [NSEntityDescription
insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
Friend *f = (Friend *) newManagedObject;
f.name = @"name1";
//1. --- here context.hasChanges == 1 --- ok
NSError *error = nil;
if (![context save:&error]) { ... }
//2. --- here context.hasChanges == 0 --- ok
f.name = @"name2";
//3. --- here context.hasChanges == 0 --- nok?
if (![context save:&error]) { ... }
コメント1ではすべてが順調です。Friendタイプの新しいNSManagedObjectを取得し、nameプロパティを変更できます。コンテキストは、保存するものがあることを示しています。コンテキストを保存した後、context.hasChanges==0が表示されます。コンテキストを保存した後もデータが永続的であることに注意してください。
コメント2の後、nameプロパティを変更します。ここで、context.hasChanges == 1を期待し、コンテキストを保存した後も、新しい名前が永続的であると期待します。しかし、残念ながらそうではありません。アプリケーションを再起動し、name-property = @"name1"でFriendインスタンスをロードします。
コアデータドキュメント内にヒントや例が見つかりません。だから私は何が間違っているのですか?既存のフレンドインスタンスを更新/変更し、それを永続化するにはどうすればよいですか?
私が見る唯一の解決策は、エントリを削除し、変更して、再度追加することです。しかし、これが正しい方法だとは思いません。
ありがとう!