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是我想用来更新核心数据对象的对象。

我发现日志消息说这两个对象是相同的......

我获取了请求并没有做任何事情,但它确实有效。为什么它有效?

4

1 回答 1

1

起初,Core Data 不是数据库——它是一个对象图,可以保存到某种存储中。如果您在那里的对象具有唯一identifier性,那么使用相同的identifier值获取会为您提供相同的对象。Core Data 不会为相同的实体创建不同的托管对象实例(比如标识符 = 7 的书),所以无论你在哪里处理同一个对象,如果你获取它 15 次也没关系,你总是会结束同一个。

于 2013-02-26T06:55:18.053 回答