一.下面摘自iOS教程:Core Data数据持久性存储基础教程,做了一些改动。
就像我一直说的,Core Data框架是iOS编程,乃至Mac编程中使用持久性数据存储的最佳方式,本质上来说,Core Data使用的就是SQLite,但是通过一系列特性避免了使用SQL的一些列的麻烦,不仅如此,他还能够合理管理内存,反正好处很多,我们推荐使用。
创建一个工程,勾选”Use Core Data”,如图:
在AppDelegate.h
中,出现了下面的三个属性:
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
下面来解释一下这三个术语:
NSManagedObjectContext
:托管对象上下文,它负责管理托管对象图,图中所有的托管对象都需要通过托管对象上下文来注册。NSManagedObjectModel
:托管对象模型,它是一个结构,用来描述应用程序中的托管对象或者实体。NSPersistentStoreCoordinator
:持久化存储协调器,在应用程序和外部数据存储的对象之间提供访问通道的框架对象集合统称为持久化堆栈,在堆栈顶部的是托管对象上下文,在堆栈底部的是持久化对象存储,在托管对象上下文和持久化对象存储之间的便是持久化存储协调器。程序使用这个类的实例来访问持久化对象存储。
上图大概就是Core Data架构中各种对象之间的关系。
二.下面的讲解摘自 Core Data入门
Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的。
a.模型文件
在Core Data,需要进行映射的对象称为实体(entity),而且需要使用Core Data的模型文件来描述app中的所有实体和实体属性。
接下来看看创建模型文件的过程(重建一个工程,不选择”Use Core Data”):
1.选择模板
2.文件名为”Model”
3.添加实体和属性
4.建立Card和Person之间的关系
b.了解NSManagedObject
通过Core Data从数据库取出的对象,默认情况下都是NSManagedObject对象
NSManagedObject的工作模式有点类似于NSDictionary对象,通过键-值对来存取所有的实体属性
- setValue:forKey:存储属性值(属性名为key)
- valueForKey:获取属性值(属性名为key)
注:黑色表示类名,红色表示类里面的一个属性
c.开发步骤总结:
- 初始化NSManagedObjectModel对象,加载模型文件,读取app中的所有实体信息
- 初始化NSPersistentStoreCoordinator对象,添加持久化库(这里采取SQLite数据库)
- 初始化NSManagedObjectContext对象,拿到这个上下文对象操作实体,进行CRUD操作
三.代码实现CoreData
先添加CoreData.framework和导入主头文件