一、CoreData的增删改查
提前总结:
(1)在每次执行四个操作的时候,要首先保证上下文存在(还活着)。
(2)'增':创建保存对象部分,不是直接new或者 alloc-init。
(3)'改':'删':'查':NSPredicate 过滤条件(精确和非精确)。
上篇文章中已经贴出了创建上下文的简单代码。
coreData操作-增(插入)
//插入数据
Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.context];
student.name = self.nameText.text;
student.timeCreate = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterLongStyle timeStyle:NSDateFormatterLongStyle];
//保存
NSError *error = nil;
BOOL success = [self.context save:&error];
if (!success) {
[NSException raise:@"访问数据库错误" format:@"%@",[error localizedDescription]];
}
coreData操作-查
iOS中的谓词(NSPredicate)使用
iOS学习之NSPredicate
// 初始化一个查询请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 设置要查询的实体
request.entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managedContext];
//以上代码简写成下边
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//也可以简写为
NSFetchRequest *request = [Student fetchRequest];
//执行请求
NSError *error = nil;
//请求到的是全部student
NSArray *students = [self.context executeFetchRequest:request error:&error];
if (error) {
[NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
}else{
Student *stu = [students lastObject];
self.hintLabel.text = [NSString stringWithFormat:@"添加了一个学生,名字是%@,id是%zd",stu.name,stu.idNum];
}
//超简单谓词,根据姓名查询
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//设置过滤条件
NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"李四2"];
request.predicate = pre;
NSError *error = nil;
NSArray *objs = [self.managedContext executeFetchRequest:request error:&error];
if (error) {
[NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
}
// 2.更新名字
for (Student *stu in objs) {
stu.name = @"被修改的新名字";
}
//保存,用 save 方法
BOOL success = [self.managedContext save:&error];
if (!success) {
[NSException raise:@"访问数据库错误" format:@"%@",[error localizedDescription]];
}
coreData操作-删
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//查到到你要删除的数据库中的对象
NSPredicate *predic = [NSPredicate predicateWithFormat:@"name = %@",@"张三2"];
request.predicate = predic;
//请求数据
NSArray *objs = [self.managedContext executeFetchRequest:request error:nil];
for (Student *stu in objs) {
[self.managedContext deleteObject:stu];
}
[self.managedContext save:nil];
二、对CoreData使用的封装 -> CoreDataHelper
我是绝对绝对不会告诉你上边的这段代码是我从AppDelegate.m中将有关CoreData的部分剪贴出来生成新的CoreDataHelper类的。
这里简单写了一个demo,用CoreDataHelper增删改查操作。
点我下载Demo
网友评论