CoreData 简要总结(二)增删改查操作

一、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

你可能感兴趣的:(CoreData 简要总结(二)增删改查操作)