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
首先在创建项目的时候需要勾选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
相关文章推荐
- 17个提升iOS开发效率的必用工具
- iOS block 初探
- iOS 图片压缩
- ios中MRC下set方法的正确写法
- iOS ShareSDK Scheme
- ios中自定义tabBar
- ios中自定义tabBar
- iOS标准时间与时间戳相互转换
- 在iOS7中修改状态栏字体的颜色
- iOS Widget开发
- 16.使用iOS自带的库制作属于自己的二维码图片
- iOS银联支付的流程
- IOS 导航栏(状态栏)透明遇到的一些问题
- IOS 开发 编码规范
- iOS7.11-7.12和iOS8.0-3.3通用隐藏ID的方法
- iOS安全–使用static inline方式编译函数,防止静态分析
- 自定义二维码扫描页面-用系统提供的类
- iOS 推送响应
- iOS常见的几种加密和比较
- iOS开发 - 统计图的绘制