如何更新核心数据中的现有对象?
当我插入新的对象,我用下面的代码:
NSManagedObjectContext *context = [appDelegate managedObjectContext]; Favorits *favorits = [NSEntityDescription insertNewObjectForEntityForName:@"Favorits" inManagedObjectContext:context]; favorits.title = @"Some title"; NSError *error; if (![context save:&error]) { NSLog(@"Whoops"); }
如何更新核心数据中的现有对象?
更新很简单,创build一个新的。
要更新一个特定的对象,你需要设置一个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]; // error handling code
数组results
包含sqlite文件中包含的所有托pipe对象。 如果你想抓住一个特定的对象(或更多的对象),你需要使用该请求的谓词。 例如:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", @"Some Title"]; [request setPredicate:predicate];
在这种情况下, results
包含标题等于Some Title
的对象。 设置一个谓词等于把WHERE子句放在一个SQL语句中。
有关更多信息,我build议您阅读核心数据编程指南和NSFecthRequest
类参考。
-
核心数据编程指南
-
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
子类。
// maybe some check before, to be sure results is not empty NSManagedObject* favoritsGrabbed = [results objectAtIndex:0]; [favoritsGrabbed setValue:@"My title" forKey:@"title"]; // save here the context
在这两种情况下,如果您在上下文中进行save
,数据将被更新。
您必须从上下文中获取对象,更改所需的属性,然后像在示例中那样保存上下文。
我希望这会帮助你。 因为它为我工作。
NSMutableArray *results = [[NSMutableArray alloc]init]; int flag=0; NSPredicate *pred; if (self.txtCourseNo.text.length > 0) { pred = [NSPredicate predicateWithFormat:@"courseno CONTAINS[cd] %@", self.txtCourseNo.text]; flag=1; } else { flag=0; NSLog(@"Enter Corect Course number"); } if (flag == 1) { NSLog(@"predicate: %@",pred); NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"Course"]; [fetchRequest setPredicate:pred]; results = [[self.context executeFetchRequest:fetchRequest error:nil] mutableCopy]; if (results.count > 0) { NSManagedObject* favoritsGrabbed = [results objectAtIndex:0]; [favoritsGrabbed setValue:self.txtCourseName.text forKey:@"coursename"]; [self.context save:nil]; [self showData]; } else { NSLog(@"Enter Corect Course number"); } }
- 什么是NSManagedObjectContext的performBlock:用于?
- 什么是NSUserDefaults的限制?
- 如何创build一个核心数据谓词来testing一个关系包含所有给定的对象?
- 我如何才能知道iPhone用户目前是否有密码设置和encryptionfunction?
- iPhone:将布尔值保存到核心数据中
- 在executeFetchRequest上枚举时“集合发生了变化”
- 如何使用UISearchDisplayController / UISearchBar过滤NSFetchedResultsController(CoreData)
- CoreData:警告:无法加载名为的类
- CoreData – 不能将空string设置为属性的默认值