1.CoreData数据库框架的优势
CoreData数据持久化框架是Cocoa API的一部分,首次在iOS5版本的系统中出现,它允许按照实体 - 属性 - 值 模型组织数据,并以XML,二进制文件或者SQLite数据文件的格式持久化数据。
CoreData主要提供对象 - 关系映射(ORM)功能,把oc对象转化为数据保存到文件,也可以数据转化为oc对象。
sqlite:
1.基于c接口,需要使用sql语句,代码繁琐
2.在处理大量数据时,表关系更直观
3.在oc中不是可视化的
CoreData:
1.可视化,有undo/redo能力
2.可以实现多种文件格式NSSQLiteStoreType,NSXMLStoreType
3.苹果官方API支持,与iOS结合更紧密
核心对象:
实体管理类:NSManagedObject
实体描述类:NSEntityDescription(菜单详情步骤)
作用:用来描述实体类
数据管理器类:NSManagedObjectContext(服务员小姐)
作用:负责应用和数据库之间的交互
数据连接器类:NSPersistentStoreCoordinator(厨师)
作用:添加持久化存储库
数据调节器类:NSPersistentStore(帮厨)
数据模型器类:NSManagedObjectModel(菜单)
作用:代表CoreData的模型文件
2.CoreData数据库框架的核心对象
持久化存储和存储文件:
NSPersistentStore:持久化存储,是对实际文件的一种Object-C表示方式,一个被封装好的底层类,用于存储数据。
存储文件:用来存储和管理数据的文件,iOS支持4种存储类型:NSSQiteStoreType,NSBinaryStoreType,NSInMemoryStoreType,NSXMLStoreType
NSManagedObjectContext:被管理对象上下文CoreData中用于操作和使用数据,负责应用和数据库之间的交互。
数据的保存需要NSMangedObjectContext进行save操作
数据的查询需要NSManagedObjectContext进行executeFetchRequest操作(返回值是数组)
CoreData提供的是对象关系映射,NSManagedObjectContext操作的都是NSManagedObject对象。
NSManagedObjectModel:被管理对象模型,管理多个对象
NSManagedObject:被管理对象,CoreData返回的数据模型,被管理的对象是根据实体描述生成的。
NSEntityDescription:实体描述类,根据实体创建被管理对象
Entity:实体类,实体是对文件数据的描述。被管理对象表示实体,实体包含名称,属性(字段)和关系,实体的名称通常和被管理对象名一致
NSFetchRequest:查询请求,可以做排序操作,也可以使用谓词
NSManagedObjectContext根据NSFetchRequest查询数据,以数组形式返回,数组中包含被管理对象(NSManagedObject)
NSSortDescriptor:排序操作
3.CoreData数据库的简单操作
1.创建实体类和属性
切换可视化关系图:
部分代码:
@interface ViewController ()
//声明一个managedObjectContext对象
@property(nonatomic,strong) NSManagedObjectContext *context;
@end
//初始化上下文,实现应用和数据库之间的数据交互
self.context = [ [NSManagedObjectContext alloc ] init];
//从应用程序当中加载模型文件
NSURL *modelURL = [[NSBundle mainBundle] URLForResource : @"Data" withExtension: @"momd"];
//(代表的就是刚刚创建的实体)
self.managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
//创建连接器
//连接器对象关联的实体模型
................(以上等步骤文件里是提供现成的)...............................................
4.CoreData数据库表关联操作
5.使用CoreData数据库的迁移
CoreData支持随着App开发演进而带来的对象模型升级或修改的管理,模型的改变将导致不兼容(或不能打开)以前版本创建的存储。如果你要改变你的模型,你就必须要改变现有存储中的数据 - 即数据存格式(store format)----这被称为数据迁移(migration)
数据迁移的三个阶段:
1.创建基于源实例对象的目标实例对象;
2.重新建立联系
3.验证与保存
版本升级:
数据迁移过程中,CoreData创建了两个栈(stacks),一个用于源存储(source store),一个用于目标存储(destination store)。随后,CoreData从源栈中获取对象,对应的将其插入目标栈。
注意:在新栈中,诸多对象是CoreData重新创建(re-create)
总结:
1.CoreData数据库框架的实现核心是持久化存储栈
2.与CoreData数据库框架的所有交互都是通过NSManagedObjectContext完成的
3.NSManagedObjectContext中的数据是缓存在内存中的副本,要想达到持久化目的必须更新保存