ios - coredata增删改查简单使用

  • 创建项目的时候勾选上
ios - coredata增删改查简单使用_第1张图片
Paste_Image.png
  • 勾选后会自动生成数据库文件
ios - coredata增删改查简单使用_第2张图片
Paste_Image.png
  • 点击后再点击"加号"添加实体(entity)
  • 实体(entity)的属性与要创建的类的属性要一致
ios - coredata增删改查简单使用_第3张图片
Paste_Image.png
  • 左侧Person首字母要大写,否则报错.
  • 右侧属性名要小写否则报错,这可能是xcode区分 "类" 与 "属性" 的机制
  • Attributes属性对应的类型勾选上
  • 下面Relationship关系中,第一个 sex 代表Person中有sex属性,Relationship第二个参数Sex (注意大写的),代表sex属性所属与Sex类,第三个"inverse"代表的是Sex类中含有Person类型的属性
  • Sex的entity中也一样
ios - coredata增删改查简单使用_第4张图片
Paste_Image.png
  • 第三步创建与数据库相关联的类文件
ios - coredata增删改查简单使用_第5张图片
Paste_Image.png
  • 点击后
ios - coredata增删改查简单使用_第6张图片
Paste_Image.png
  • 勾选,next
ios - coredata增删改查简单使用_第7张图片
Paste_Image.png
  • 这一步一定要全选,点击next后生成八个文件
ios - coredata增删改查简单使用_第8张图片
Paste_Image.png
  • 暂时不要动这几个文件

  • 下面写代码:
  • 在Appdelegate中可以发现生成了好多方法,这里是固定写法不用太在意,在这里解释一下主要的几个对象的作用

//_managedObjectContext这是管理数据库中所有实体的上下文,也就是通过他可以查找数据库中的数据
@synthesize managedObjectContext = _managedObjectContext;
//对象模型,根据对象模型来存储数据
@synthesize managedObjectModel = _managedObjectModel;
//持久化数据存储调度器,也就是通过它可以把数据存到数据库中
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;

  • 就做了一个简单的界面
ios - coredata增删改查简单使用_第9张图片
Paste_Image.png
  • 输入所有的数据后点击保存可以把数据存储到数据库

  • 当输入查询的内容为空的时候,点击查询会列出所有数据库的内容

  • 当输入查询内容后,点击删除,会删掉所有,包含输入的内容的字母的对象

  • 当输入查询内容后,点击修改,会修改掉所有,包含输入的内容的字母的对象,修改的内容统一设置了一下.可以根据自己需要做出修改.

  • 看控制器代码:可以做一些略微的封装.大概看一下

  • 第一个功能增加数据: 根据输入的内容保存到数据库


/** 保存 增加数据 */
- (IBAction)saveClick:(id)sender {
    
//获取AppDelegate中的被管理所有对象的上下文managedObjectContext
    AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext * context = delegate.managedObjectContext;
//创建对象,来分别保存输入的内容
    Person * per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
    //获取输入的各项内容
    per.name = self.name.text;
    per.age = self.age.text;
    per.phone = self.phone.text;
    //创建sex对象,把sex对象赋值给Perosn中的sex属性,同时保存sex
    Sex * sex = [NSEntityDescription insertNewObjectForEntityForName:@"Sex" inManagedObjectContext:context];
    sex.sex = self.sex.text;
    per.sex = sex;
//保存数据
    NSLog(@"保存");
    [delegate saveContext];
}

  • 第二个功能:查询数据

/** 查询 */
- (IBAction)search:(id)sender {
    
    NSString * searchContent = self.searchTxt.text;
    NSPredicate * pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",searchContent];
    /**
     1.谓词查询内容 
     2.如果输入要查询的内容长度为0,则显示保存的所有的数据
     */
    if (searchContent.length == 0) {
        pre = nil;
    }
    
    AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
    
    NSManagedObjectContext * context = delegate.managedObjectContext;
    
    NSEntityDescription * des = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
    
    NSFetchRequest * request = [NSFetchRequest new];
    request.entity = des;
    request.predicate = pre;
    
    /** 获取查询到的内容---是数组 */
    NSArray * array = [context executeFetchRequest:request error:NULL];
    //遍历查询到的数据,并打印
    for (Person * p in array) {
        NSLog(@" %@ : %@ : %@ : %@",p.name,p.age,p.sex.sex,p.phone);
    }
}

  • 第三个功能: 删除

/** 删除 */
- (IBAction)delete:(id)sender {
    
    /** 
     1.查询到要删除的内容 
     2.获取输入的内容
     */
    NSString * deleteContent = self.searchTxt.text;
    
    /** 查询要删除带有输入的关键字的对象 */
    NSPredicate * pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",deleteContent];
    
    AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
    
    /** 被管理对象上下文--(获取所有被管理对象的实体) */
    NSManagedObjectContext * context = delegate.managedObjectContext;
    
    /** 根据上下文获取查询数据库实体的请求参数---要查询的entity(实体) */
    NSEntityDescription * des = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
    
    /** 查询请求 */
    NSFetchRequest * request = [NSFetchRequest new];
    
    /** 根据参数获取查询内容 */
    request.entity = des;
    
    request.predicate = pre;
    
    /** 
     1.获取所有被管理对象的实体---根据查询请求取出实体内容 
     2.获取的查询内容是数组
     3.删掉所有查询到的内容
     3.1.这里是模糊查询 即 删除包含要查询内容的字母的内容
     */
    NSArray * array = [context executeFetchRequest:request error:NULL];
    
    /** 对查询的内容进行操作 */
    for (Person * p in array) {
        [context deleteObject:p];
    }
    NSLog(@"删除完成");
    [delegate saveContext];
}


  • 第四个功能:修改

/** 修改 */
- (IBAction)update:(id)sender {
    
    /** 获取输入内容 */
    NSString * updateContent = self.searchTxt.text;
    NSPredicate * pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",updateContent];
    
    AppDelegate * delegate = [UIApplication sharedApplication].delegate;
    NSManagedObjectContext * context = delegate.managedObjectContext;
    NSEntityDescription * des = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
    NSFetchRequest * request = [NSFetchRequest new];
    request.entity = des;
    request.predicate = pre;
    
    NSArray * array = [context executeFetchRequest:request error:NULL];
    
//这里修改的话把全部查询到的内容修改成了 "张三",可以根据自己的需要进行设置
    for (Person *p in array) {
        p.name = @"张三";
        [context updatedObjects];
    }
    NSLog(@"修改完成");
    [delegate saveContext];
}

谓词使用小结:

ios - coredata增删改查简单使用_第10张图片
Paste_Image.png

ios - coredata增删改查简单使用_第11张图片
Paste_Image.png
ios - coredata增删改查简单使用_第12张图片
Paste_Image.png

简单的增删改查完成,感兴趣的可以做一下tableView的cell,对cell的数据进行增删改查,设置代理,实时监听数据库数据的变化,来实时刷新tableView即可

  • 源码地址: http://pan.baidu.com/s/1c22V2Zu

你可能感兴趣的:(ios - coredata增删改查简单使用)