ios - coredata增删改查简单使用

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

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

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

  • 就做了一个简单的界面
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];
}

谓词使用小结:

Paste_Image.png

Paste_Image.png
Paste_Image.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容