1

コアデータのロジックについて混乱しています。

コア データをデータベースとして扱い、コア データ メソッドを 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つのオブジェクトが同じであることがわかりました...

私はリクエストを取得し、何もしませんでしたが、動作します。なぜそれが機能するのですか?

4

1 に答える 1

1

最初、Core Dataはデータベースではなく、オブジェクトグラフであり、ある種のストレージに保存できます。そこにあるオブジェクトに一意のが含まれている場合、同じ値identifierでフェッチすると同じオブジェクトが得られます。identifierCore Dataは、同じエンティティ(たとえば、識別子= 7の本)に対して管理対象オブジェクトの異なるインスタンスを作成しないため、同じオブジェクトを処理する場所はどこでも、15回フェッチしてもかまいませんが、常に終了します。同じものでアップ。

于 2013-02-26T06:55:18.053 に答える