IOS CoreData
来源:互联网 发布:雅思测试软件 编辑:程序博客网 时间:2024/05/19 14:54
一: CoreData 中的常见的管理类
(1)NSManagedObjectContext // 临时数据库
(2)NSManagedObjectModel // 模型管理器
(3)NSPersistentStoreCoordinator // 数据连接器
二: CoreData中依据实体(已生成的)创建对象 并持久化
// 获取Appselegate 对象
AppDelegate * dele = (AppDelegate * )[UIApplication sharedApplication].delegate;
// 创建实体描述
NSEntityDescription * entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:dele.managedObjectContext];
// 根据实体描述 创建 模型 并插入到临时数据库
Person * person = [[Person alloc]initWithEntity:entity insertIntoManagedObjectContext:dele.managedObjectContext];
person.name = @"iverson";
person.age = @39;
// 将临时数据库 同步到 数据库
[dele saveContext];
三: CoreData中 如何进行增 删 改 查
就是依据 二 中的步骤 创建一个要增加的对象 并再一次同步到数据库即可。
(2)查
查 即对已做的数据持久化进行检索 并可视化 但是在进行数据取值 的时候 要引入一个新的 类 和对象(并附上其初始化方法)NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Person"]; 根据实体名 创建FetchRequest对象 FetchRequest 是CoreData的取值类之一 可以依据已经生成的 实体modal 进行检索 完整的取值 查询过程 如下:
// 获取Appselegate 对象
AppDelegate * dele = (AppDelegate * )[UIApplication sharedApplication].delegate;
// 根据实体描述名 创建FetchRequest对象
NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Person"];
// 取出属性 然后用KVC赋值给对象
request.returnsObjectsAsFaults = NO;// 设置在安全性基础上设置 输出样式
// 取数据,根据FetchRequest
NSArray * array = [dele.managedObjectContext executeFetchRequest:request error:nil];
NSLog( @"%@",array);
(3) 删 该
两者都是在查询的基础上进行的,只有拿到数据库中的值才可以进行 删除和 改正 所以要先按照上述步骤进行 取值 然后再依据已经生成的Model 定义Model类对象 调用 deleteObject: 方法 就可以实现删除 而改正 则是 重新的对已经拿到(查询到的)数据 根据model中的字段进行改正(赋新值),并同步到数据库即可
*******************************************************************************************************************************************
// 获取Appselegate 对象
AppDelegate * dele = (AppDelegate * )[UIApplication sharedApplication].delegate;
// 根据实体描述名 创建FetchRequest对象
NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Person"];
// 取出属性 然后用KVC赋值给对象
request.returnsObjectsAsFaults = NO;// 设置在安全性基础上设置 输出样式
// 取数据,根据FetchRequest
NSArray * array = [dele.managedObjectContext executeFetchRequest:request error:nil];
NSLog( @"%@",array);
// 删除
Person * person1 = [array firstObject];
[dele.managedObjectContext deleteObject:person1];
// 删除后 同步数据库
[dele saveContext];
********************************************************************************************************************************************
// 获取Appselegate 对象
AppDelegate * dele = (AppDelegate * )[UIApplication sharedApplication].delegate;
// 根据实体描述名 创建FetchRequest对象
NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Person"];
// 取出属性 然后用KVC赋值给对象
request.returnsObjectsAsFaults = NO;// 设置在安全性基础上设置 输出样式
// 取数据,根据FetchRequest
NSArray * array = [dele.managedObjectContext executeFetchRequest:request error:nil];
NSLog( @"%@",array);
person1.name = @"高富帅";
[dele saveContext];
*******************************************************************************************************************************************
四: CoreData中 如何利用谓词进行数据 查询
Cocoa 提供了NSPredicate 用于指定过滤条件,谓词是指在计算机中表示计算真假值的函数,它使用起来有点儿像SQL 的查询条件,主要用于从集合中分拣出符合条件的对象,也可以用于字符串的正则匹配.需要注意谓词是检索数据的 所以其一般是用于数据库取值时的
// 谓词
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name == 'kobe' "];
request.predicate = perd;
// 以什么结尾或者开头的搜索
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name endswith' e' "];
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name beginswith 'k' "];
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name beginswith %@ ",@"k"];
// 类似于 可替换以什么 开头 以什么结尾
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name liake %@ ",@"*e"];
// 谓词中的包含查询
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' "];
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' and age == 38 "];
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' && age == 38 "];
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' || age == 38 "];
NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' or age == 38 "];
五: CoreData中 的版本迁移
迁移准备
1) 选中工程中的 xcdaramodeId 文件,Menu->Editor->Add Model Version
这一步添加完成之后,工程中的*xcdaramodeId* 文件将会被展开,并且出现了新增加的Model文件
2) 在Xcode右侧的辅助工具栏中找到 Model Version, 选择刚刚添加的Model文件,这个时候你会发现Xcode目录中,Model文件上的绿色的勾选中了当前选择的Model文件
3) 在新的Model文件中修改最新的Entities等信息,记得也同时修改NSManagedObject Subclass对应的实现
4) 修改 NSPersistentStoreCoordinator
部分实现:
*******************************************************************************************************************************************
在得到persistentstore时,一般是在appdeleate的persistentStoreCoordinator方法中,为addPersistentStoreWithType:configuration:URL:options:error:方法的options传递参数,模板产生的方法该参数是nil。
为支持自动迁移,传递一个包含2个key的字典作为参数,NSMigratePersistentStoresAutomaticallyOption和NSInferMappingModelAutomaticallyOption,赋值YES。
相关链接: http://blog.csdn.net/sirchenhua/article/details/7302729
*******************************************************************************************************************************************
- IOS CoreData
- iOS CoreData
- iOS-CoreData
- iOS CoreData
- iOS CoreData
- iOS--CoreData
- iOS coreData
- iOS coreData
- IOS CoreData
- IOS CoreData
- iOS - coreData
- iOS coredata
- iOS CoreData
- ios CoreData初识
- ios 使用CoreData
- IOS CoreData (1)
- iOS CoreData (1)
- iOS CoreData(2)
- Linux服务管理-rpm的 xinet管理
- request.META里包含了哪些数据?
- Linux内核工程导论——内存管理(二)
- Android中asset文件夹和raw文件夹区别
- 用两个不规则容器倒出指定容量的水
- IOS CoreData
- HDU 2222 — Keywords Search
- How can i specify the resource to get from R.res.drawable dynamically?
- POJ 1422 && ZOJ 1525 --Air Raid【二分图 && 最小路径覆盖】
- [C++]ZigZag Conversion 之字形转换
- 程序内存分布
- java.net.UnknownHostException: Unable to resolve host "xxx": No address associated with hostname
- 剑指offer 算法 (时间空间效率的平衡)
- C 标准库IO缓冲区 内核缓冲区(一)