接上篇,在上篇文章中我们描述了如何在自己的iOS项目中使用CoreData,本篇文章我来剖析一下Core Data框架,具体介绍Core Data框架中关键的几个元素的作用,及他们之间的关系。
下面介绍过程中,关键词就不做翻译了,翻译不准确总觉的变扭,还不如用原文档中的英文来的直接。先看看Core Data Framework的几个重点关键字:
a) Persistent Store (Store File)
b) Persistent Object Store
c) Managed Object
d) Entity Description Object
e) Managed Object Model
f) Managed Object Context
g) Persistent Store Coordinator
h) Fetch Request
i) Mapping Model
Core Data Stack,主要对象关系结构如下图所示:
图中“Store File”,即持久化数据存储文件PersistentStore,对应上篇文章中示例代码中的文件“BookModel.sqlite”,也就是我们的数据文件。
图中“PersistentObject Store”,对于我们开发者是透明的,这里可暂时不关注。
我们在代码中能见到的是,“ManagedObject Context”、“Persistent Store Coordinator”、“Managed ObjectModel”和“Fetch Request”。所以我们下面重点介绍这几个元素。
1、 Managed Object Model 和 ManagedObject
a) Managed Object是类NSManageObject或者它的子类的对象,对应我们上篇文章提到的Entity,一个Managed Object表示数据文件中的一条记录;
b) Managed Object Mode是类NSManagedObjectModel的实例对象;
c) Managed Object Mode可以理解为一个数据库结构的对象表现形式;
d) Managed Object Mode是NSEntityDescription实例对象的集合,一个EntityDescription Object描述了数据库中一个数据表实体,包括表名称、表对应的NSManagedObject对象的名称、属性(Attributes)和关系(Relationships)等。
如下图所示Managed Object 与 数据库表记录间的关系:
2、 Managed Object Context
a) 它是类NSManagedObjectContext的实例对象;
b) 它的主要职责是用来管理一个Managed Object的集合;
c) 可以通过它对Managed Object进行增、删、改、查的操作,所有的操作会在Managed Object Context中存储不做提交,直到对它执行保存动作时才会被存储到外部文件中(例如:BoolModel.sqlite)。
如下图所示:
3、 Persistent Store Coordinator
a) 它是类NSPersistentStoreCoordinator的实例对象;
b) 它用来管理Persistent Object Store对象的集合,每个PersistentObject Store对应一个外部存储文件(Persistent Store);
如下图所示,描述了PersistentStore Coordinator在Core Data 框架中的作用,一般在iOS应用程序中均为单一存储(即一个存储文件),不会像下图这么复杂。
4、 Fetch Request
a) 它是类NSFetchRequest的实例对象;
b) 它用来向Managed Object Context提交要操作的实体对象(Entity);
c) 通过类NSEntityDescription来描述实体对象,类NSPredicate提供过滤条件,类NSSortDescriptor对查询结果做排序等。
如下图所示,描述一条记录是如何通过ManagedObject Context查询出来的。
5、 Mapping Model
a) 它用来描述一个旧的Source Managed Object Model 与一个新的Destination ManagedObject Model间的变化;
b) 可以利用Mapping Model 迁移Source Managed Object Model中记录的数据到DestinationManaged Object Model中。这样可以实现对数据库的升级改造操作。
上述内容,对Core Data Framework做了介绍,我们重点在介绍Core Data的框架结构,所以涉及到的其他知识一笔带过了,有兴趣的同学可以到SDK Doc中查询详细说明。对于Mapping Model我们在本片只做了简单介绍,事实上他的功能及作用很强大,有了它我们可以对我们的数据存储文件(Persistent Store)做版本化管理,可以很方便的对其做升级改造处理,非常有利于应用程序的持续性开发,关于这部分内容我们在下篇文章中继续。
参考资料:《Xcode4.6 doc set》