您的位置:首页 > 移动开发 > IOS开发

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

2015-12-21 19:56 603 查看
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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: