コアデータのロジックについて混乱しています。
コア データをデータベースとして扱い、コア データ メソッドを SQL クエリとして扱いました。
コア データ内のオブジェクトをローカル メモリのオブジェクトで更新しようとしたとき、次のコードだけで機能を作成できることがわかりました。
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Book" inManagedObjectContext:_managedObjectContext]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"identifier == %@", theBook.identifier];
[request setPredicate:predicate];
NSError *error;
Book *book = [[_managedObjectContext executeFetchRequest:request error:&error] lastObject];
if (error) {
NSLog(@"Error getting book to update: %@", error);
abort();
}
// NSLog(@"%d", book == theBook);
error = nil;
if (![_managedObjectContext save:&error]) {
NSLog(@"Error saving the book: %@", error);
abort();
}
theBook
コアデータのオブジェクトを更新したいオブジェクトです。
そして、ログメッセージに2つのオブジェクトが同じであることがわかりました...
私はリクエストを取得し、何もしませんでしたが、動作します。なぜそれが機能するのですか?