更新很简单,就像创建一个新的一样。
要更新特定对象,您需要设置一个
NSFetchRequest
。这个类相当于SQL语言中的SELECT语句。
以下是一个简单的示例:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Favorits" inManagedObjectContext:moc]];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
数组 results
包含了 sqlite 文件中的所有托管对象。如果你想获取特定的对象(或多个对象),你需要使用一个谓词来进行请求。例如:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", @"Some Title"]
[request setPredicate:predicate]
在这种情况下,
results
包含了标题等于
Some Title
的对象。设置谓词相当于在 SQL 语句中使用 WHERE 子句。
如需进一步了解,请阅读 Core Data 编程指南和
NSFecthRequest
类参考文档。
希望能帮到您。
编辑(可用于更新的代码片段)
// maybe some check before, to be sure results is not empty
Favorits* favoritsGrabbed = [results objectAtIndex:0]
favoritsGrabbed.title = @"My Title"
// save here the context
如果您没有使用NSManagedObject
的子类。
NSManagedObject* favoritsGrabbed = [results objectAtIndex:0];
[favoritsGrabbed setValue:@"My title" forKey:@"title"];
无论哪种情况,如果在上下文中执行save
操作,数据都将被更新。
NSManagedObject
就可以使其工作! - ctietze