iOS开发过程中避免不了数据持久化存储的问题,在iOS 5.0之后,苹果公司为iOS开发人员提供了一个框架,那就是CoreData框架(注意,CoreData只是个框架,并不是数据库)。CoreData最大的优点就是可以将普通的数据当成“程序猿”们最喜欢的对象来操作,而不必去在意数据在磁盘上的存储方式,并且CoreData可以合理的管理内存,使用起来更加高效,这简直就是程序员的福音啊。
1.CoreData中的关键类
- NSManagedObjectModel(被管理的对象模型)
数据库所有表格或数据结构,包含各实体的定义信息
作用:添加实体的属性,建立属性之间的关系
操作方法:视图编辑器,或代码
- NSManagedObjectContext(被管理的对象上下文)
操作实际内容(操作持久层)
作用:插入,更新,查询,删除数据
- NSManagedObject(被管理的数据对象)
相当于数据库中的一条记录
- NSPersistentStoreCoordinator(持久化存储协调器)
相当于数据库的连接器
作用:设置数据存储的名字,位置,存储方式,和存储时机
- NSFetchRequest(获取数据的请求)
相当于数据库的查询语句
- NSPredicate(谓词)
查询数据的过滤条件
- NSEntityDescription(实体描述)
对实体结构的描述
2.模型文件
CoreData给我们提供了对象 — 关系映射功能,可以将对象模型转成关系模型,也就是把OC中的对象转化成数据库中的数据,同时也可以将数据库中的数据还原成OC中的对象。CoreData将需要进行映射的对象称作实体(Entity),每个实体都可以拥有许多属性(Attributes),不同的实体之间还可以拥有一些关联关系(Relationships)。而这一切都建立在模型文件的基础上的。
- 建立模板
如果你是新建的一个工程,那么你可以在新建工程的时候勾选Use Core Data选项:
- 创建实体
添加一个Husband实体,设置一个属性name,类型为String:
- 建立关联关系
添加一个Wife实体,设置一个基本属性name,再设置一个关联属性husband,类型为Husband:
回到Husband实体,添加关联属性wife,类型为Wife,Inverse属性设置为husband:
Husband实体勾选了Inverse属性后,Wife实体中的husband属性会自动关联,这时候就建立了一对一的关联关系:
创建完关联关系之后我们可以切换到图形界面去看看我们创建的实体模型:
3.创建NSManagedObject的子类
在默认情况下,实体的数据类型都是NSManagedObject类型的,可以通过键值编码的方式存取数据。这样存取稍显麻烦,而且在项目中可能不满足于数据的存取,还会需要添加一些业务方法去处理其他的任务,这个时候就需要创建NSManagedObject的子类了。
创建完成后我们可以发现工程里多出几个类:
可以看到以我们设置的实体名命名的类是继承于NSManagedObject类的:
在最早期版本的iOS中实体的属性也是存在于上面的类中的(当时只有实体名命名的类),现阶段实体的属性都放在实体类的分类当中:
在.m文件中可以发现属性不是用常见的@synthesize修饰,而是@dynamic,这表示我们不能自己定义setter方法和getter方法,其getter和setter方法会在程序运行的时候或者用其他方式动态绑定。