数据模型(Data Model)
前面文章中介绍了Core Data堆栈,它是Core Data的核心部分。并且了解了Core Data堆栈中管理对象上下文(managed object context),持久化存储协调者(persistent store coordinator),管理对象模型(managed object model)等组成部分。这篇文章我们将集中了解Core Data中的数据模型(data model)。
在我们的应用中,管理对象模型(NSManagedObjectModel)将允许 Core Data映射持久化存储的记录到管理对象。该模型是实体描述(NSEntityDescription实例对象)的集合。
Core Data数据模型(储存在 *.xcdatamodel文件里)中定义了数据类型 (在 Core Data里的“实体”中)。大多数情况下,我们更偏向通过 Xcode 的图形界面去定义一个数据模型,但同样我们可以使用纯代码去完成这个工作。首先,你需要创建一个 NSManagenObjectModel对象,然后创建 NSEntitiyDesciption对象来表示一组实体,该实体通过 NSAttributeDescription和 NSRelationshipDescription对象来表示实体属性和实体之间的关系。
1:数据模型编辑器(Data Model Editor)
首先打开我们自己之前创建的工程,打开Xcode,然后在Project Navigator中找到Core_Data_Stack.xcdatamodeld。并点击选中,Xcode将自动显示数据模型编辑部分(Data Model Editor),如下图所示:
2:实体(Entities)
首先我们需要创建一个实体,在数据模型编辑器的底部,我们可以看到一个Add Entity的按钮,表示添加实体,Xcode会自动为实体命名为Entity,并且显示在数据模型编辑器左边区域ENTITIES部分,我们点击按钮添加一个实体,如下图:
那么实体是什么呢?Entity:是Core Data中的一个类,我们可以把实体类比为数据库中的表(其实也可以简单类比理解为OC中的类模型,我们自定义的类模型中将包含我们自己需要的属性。同样,实体类也将包含我们所需要的属性),当我们选中实体的时候,我们可以看到在右边区域会显示有attributes(属性), relationships(关系), fetched properties(获取属性).如上图所示,非常的明显。
3:属性(Attributes)
一旦我们创建了某个实体,我们就需要去定义该实体的一些属性,属性定义是非常简单的。首先我们将实体名称改为Person,可以选择双击实体可以进行修改名称,也可以在最右边的实体可编辑区域进行编辑修改,找到编辑区域中的Name部分进行修改实体名称。现在我们为Perosn实体添加属性,在Attributes区域的底部有"+"和"-"俩个按钮,很好理解,添加属性,去除属性,点击"+"添加我们的第一个属性,并且双击属性修改名称为first,点击type选择String类型,现在我们的Person实体就拥有了它自己的第一个属性,first属性。如下图所示,我们能够看到自己添加的属性:
如果我们对比数据库中的表,那么Person表就拥有了一列String类型的first。事实,当我们在应用中使用SQLite数据库的时候,Core Data将创建表来存储Person实体中的数据。但是要注意:我们强大的Core Data并不是数据库。接下来再为Person实体添加几个属性,String类型的last属性,Integer16类型的age属性。
Attribute Options
正如我前面提到的可以在右边区域修改实体的名称,那么实体的属性自然也就可以在数据模型编辑(Data Model Inspector)区域进行配置。我们选中Person实体的first属性,并且打开右侧的编辑区域,Data Model Inspector允许我们配置选中的属性,目前我们先了解一些基本的选项配置,如图所示:
瞬态(Transient)
该选项标志着属性的值是否会保存到持久化文件。如果选中表示属性不会存储到持久化存储文件中。Transient通常用在属性的值是由其他属性计算或合成而来(比如fullName属性是根据