1.Core Data用于做数据持久化,适合大数量的储存和查询;
2.
Core Data不是数据库,他可以使用数据库、XML等方式来存储数据;
3.SQLite通过SQL语句操作数据,CoreData使用面向对象的方式操作数据。使用CoreData操作数据,无需编写任何SQL语句;
4.使用时,需要导入CoreData框架;
5.优点:可以在Xcode上进行表的设计,或使用instruments进行性能检测,可以直接生成高质量的代码;
基本概念
托管对象(managed object)
一个托管对象代表你想要保存到数据存储中的一个对象。这在概念上类似于SQL中的一条记录, 并且通常也包含一些域,这些域对应于你想要保存的对象的属性。
数据存储(data store)
Core Data支持4中类型的数据存储:NSSQLiteStoreType, XMLStore, BinaryStore, InMemoryStore。
托管对象上下文(managed object context)
托管对象上下文类似于应用程序和数据存储之间的一块缓冲区。这块缓冲区包含所有未被写入数据存储的托管对象。你可以添加、删除、更改缓冲区内的托管对象。在很多时候,当你需要读、插入、删除对象时,你将会调用托管对象上下文的方法。
持久化存储协调器(persistent store coordinator)
持久化存储协调器处理到数据存储的连接,并且包含一些底层信息,像用到数据存储的名字和位置。这个类通常被托管对象上下文用到。
托管对象模型(managed object model)
托管对象模型是一个类,这个类包含每一个你想存储到数据存储中的托管对象的定义。
大概是这样一种层次关系:
大概是这样一种层次关系:
接下来看看创建模型文件的过程:
1.选择模板
![abc]()
![abc]()
2.添加实体
![]()
3.添加Person的2个基本属性
![]()
4.添加Card的1个基本属性
![]()
5.建立Card和Person的关联关系
1.选择模板
2.添加实体
3.添加Person的2个基本属性
4.添加Card的1个基本属性
右图中的表示Card中有个Person类型的person属性,目的就是建立Card跟Person之间的一对一关联关系(建议补上这一项),在Person中加上Inverse属性后,你会发现Card中Inverse属性也自动补上了
了解NSManagedObject
1.通过
Core Data
从数据库取出的对象,默认情况下都是
NSManagedObject
对象
![]()
2.
NSManagedObject
的工作模式有点类似于
NSDictionary
对象,通过键
-
值对来存取所有的实体属性
1> setValue:forKey:存储属性值(属性名为key)
2>
valueForKey:
获取属性值
(
属性名为
key)
注:黑色表示类名,红色表示类里面的一个属性
开 发步骤总结:
1.初始化NSManagedObjectModel对象,加载模型文件,读取app中的所有实体信息
2.初始化NSPersistentStoreCoordinator对象,添加持久化库(这里采取SQLite数据库)
3.初始化NSManagedObjectContext对象,拿到这个上下文对象操作实体,进行CRUD操 作
1.搭建上下文环境
CoreData中的核心对象
注:黑色表示类名,红色表示类里面的一个属性
开 发步骤总结:
1.初始化NSManagedObjectModel对象,加载模型文件,读取app中的所有实体信息
2.初始化NSPersistentStoreCoordinator对象,添加持久化库(这里采取SQLite数据库)
3.初始化NSManagedObjectContext对象,拿到这个上下文对象操作实体,进行CRUD操 作
代码实现
先 添加CoreData.framework和导入主头文件<CoreData/CoreData.h>1.搭建上下文环境
[java]
view plain
copy
- // 从应用程序包中加载模型文件
- NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
- // 传入模型对象,初始化NSPersistentStoreCoordinator
- NSPersistentStoreCoordinator *psc = [[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model] autorelease];
- // 构建SQLite数据库文件的路径
- NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
- NSURL *url = [NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@"person.data"]];
- // 添加持久化存储库,这里使用SQLite作为存储库
- NSError *error = nil;
- NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];