iOS开发——CoreData数据持久化存储

coreData是用于对数据进行实例化处理的类
首先在创建项目的时候需要勾选Use Core Data


在勾选了coreData之后会生成对应的.xcdatamodeld文件。

这种文件在经过编译之后会变成 .momd文件
然后选中这个文件 双击打开

点击下面的加号  可以增加一个实体

会出现这样的一个实体
然后点击Attributes可以添加这个实体对应的属性(我们说的把数据存起来,其实就是找到实体所对应的属性,然后对属性赋值)

都创建完之后点击
选择Create  NSManagedObject SubClass
用法
1.首先声明一个 NSManagedObjectContext *context;类型的对象
这个context上下文对象是用来对数据实体化进行操作的管理对象
实例化上下文:
NSString *storePath= [ NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ). firstObject stringByAppendingString : @"/CoreData.db" ];
获取文档目录下地数据库的path
        self . context =[[ NSManagedObjectContext alloc ] initWithConcurrencyType : NSPrivateQueueConcurrencyType ];//后面的参数一般是选私有的这个。
        // 需要给数据库管理关联一个数据持久化协调器 , 我们要使用这个协调器进行实体和 sqlite 之间的通信
       
//URL 表示实体所在的 .xcdatamodeld 文件的路径
        //xcdatamodeld 这个类型在编译的时候会生成 .momd 这个文件即可
        NSString *path=[[NSBundle mainBundle]pathForResource:@"CoreDateDemo" ofType:@"momd];//找到这个momd文件所在的路径
        NSURL *url=[ NSURL fileURLWithPath :path];//把路径转换为url
        NSManagedObjectModel *model=[[ NSManagedObjectModel alloc ] initWithContentsOfURL :url];//把得到的文件转换为 NSManagedObjectModel类型的数据
        NSPersistentStoreCoordinator *coordinator=[[ NSPersistentStoreCoordinator alloc ] initWithManagedObjectModel :model];
       
// 设置存储类型为 SQLite
       
//type: 数据存储的类型
       
//URL 表示需要存储的数据在沙盒中得路径
       
// 设置数据持久化存储的路径
       
        NSURL *coreDataPath=[NSURL fileURLWithPath:storePath];//找到数据库所在的路径
        [coordinator addPersistentStoreWithType : NSSQLiteStoreType configuration : nil URL :coreDataPath options : nil error : nil ];//把要管理的数据库类型转换为SQLite类型的
        [self.context setPersistentStoreCoordinator:coordinator];//设置要管理的coreData协调器。


2.插入数据  


此处Person是上面通过打开文件后创建实体,在实体中添加完属性由系统生成的文件,我们在用的时候需要导入.文件
Person *p=[ NSEntityDescription insertNewObjectForEntityForName : @"Person" inManagedObjectContext : self . context ];//这里是把实体去出来赋值给p;
//设置属性
p.name=@“张三”;
p.age=@15;
[ self . context save : nil ]//这里值得注意的是,每次做完更改之后都需要save保存操作。后面的nil参数是一个错误信息,可要可不要


3.删除数据
NSManagedObject *p;
[ self . context deleteObject :p];
值得注意的是,在这里要删除的对象必须是 NSManagedObject类型的,并且传入的类型不能为nil,如果传入的参数为nil,则直接崩溃
self . context save : nil ]//这里值得注意的是,每次做完更改之后都需要save保存操作。后面的nil参数是一个错误信息,可要可不要


4.查询信息
查询信息这一块系统有封装好的代码快  只要在函数内部输入fetch就会调用这段代码块
NSFetchRequest *fetchRequest = [[ NSFetchRequest alloc ] init ];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"<#Entity name#>" inManagedObjectContext:<#context#>]; //第一个参数为实体的名字 
这里是Person 第二个参数为上下文管理对象,这里指self.context
    [fetchRequest setEntity :entity];
    // Specify criteria for filtering which objects to fetch
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"<#format string#>", <#arguments#>];//这里指的时查询谓词,即相当于SQL中的where条件,里面的参数主要是对查询谓词进行格式化
    [fetchRequest setPredicate :predicate];
   
// Specify how the fetched objects should be sorted
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"<#key#>"
                                                                   ascending:YES];//此行代码的作用是在查询的时候对结果进行排序,key指的是排序字段, 后面ascending YES是按照升序排序 NO是按照降序排序
    [fetchRequest setSortDescriptors :[ NSArray arrayWithObjects :sortDescriptor, nil ]];
   
    NSError *error = nil;
    NSArray *fetchedObjects = [<#context#> executeFetchRequest:fetchRequest error:&error];//这段代码中的第一个参数是指上下文管理对象 self.context   fetchedObjects是最后查询出来的数组。
    if (fetchedObjects == nil ) {
        <#Error handling code#>
    }

5.更改信息
在修改信息首先确定好要修改那个实体的信息 例如要修改Person *per的信息
那么 修改的方式为
     per. name = @" 刘德华 " ;
    [self.context save:nil];
每次操作之后都要记得save就OKle 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值