美文网首页
CoreData 简要总结(二)增删改查操作

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

作者: 暗物质 | 来源:发表于2017-01-20 17:29 被阅读27次

    一、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 简要总结(二)增删改查操作

          本文链接:https://www.haomeiwen.com/subject/rckbbttx.html