2.3 实体

托管对象模型由一系列实体描述对象构成,这种对象就叫做实体。实体就好比一把饼干模型切割刀,用于创建托管对象。有了托管对象之后,我们就可以用Objective-C代码来操作其中的数据了。

托管对象模型可以拥有一个或多个实体,每个应用程序的实体数量会有所差别。在制作托管对象之前,首先要把每个“饼干模型切割刀”(也就是实体)设计好。实体的设计与传统数据库中数据表的设计是相似的。

在设计数据库中的数据表时,你需要完成下列内容:

·配置数据表名称(table name)。

·配置字段(field)并为每个字段设定“数据类型”(data type)。

而在设计实体时,你需要做的则是:

·配置实体名称(entity name)。

·配置属性,并为每个属性设定数据类型。

·根据实体来配置NSManagedObject的子类(该项可选)。

正如数据库中的表有字段一样,实体也有属性。属性必须有特定的数据类型(比方说字符串或整数)。如果想从实体中创建托管对象,那我们通常会根据实体来创建NSManagedObject的子类,但这并不是强制性的。采用NSManagedObject的子类确实有好处,比如可以在托管对象后面使用“点符号”(.)访问相关属性,这样可以令代码更易阅读。无论是从NSManagedObject类还是从NSManagedObject的子类创建实例,我们都可以通过托管对象这种形式来操作数据。用数据库领域的术语来说,托管对象的实例类似于数据库中某张数据表里的一行(row)。实体的名称与根据该实体创建出来的NSManagedObject子类的名称通常是一样的。根据实体来创建托管对象时,在实体中配置好的那些属性也会变成托管对象里的特性。图2-2演示了实体是如何在持久化存储区中的数据库与托管对象之间建立映射关系的。

图2-2 由Core Data实体在数据库与托管对象之间所建立的映射关系

实体是托管对象模型的基础,因为它可以把同一个范围内的数据从逻辑上组织起来。设计托管对象模型的时候,至关重要的一件事就是给实体起名字。给实体所起的名字应该由一两个英文单词构成,它要能描述出实体所表示的数据。Grocery Dude程序的用户要能够把待购买的东西放到购物清单中。用户外出购物时,可能会把“苹果”和“橘子”添加到购物清单里。而想到这一点之后,我们就会觉得:这个用来表示购物清单里待购物品的实体可能起名叫做“水果”会比较好。

在配置实体的时候一定要谨慎:为实体起的名字需要稍微通用一些,以便适应将来的变化,同时还必须足够具体,以便明确描述出它所表示的数据。有时候名字很好起,而有时候则必须反复权衡,需要根据应用程序当前和以后的功能来精心选择恰当的实体名称。由于购物清单里面不是只有水果,所以用“Item”(货品)作为实体名称,应该比“水果”更能准确地描述出清单中的待买物品。

请按下列步骤修改Grocery Dude,以便添加Item实体:

1.选定Model.xcdatamodeld。

2.点击Add Entity。

3.把新实体的名称改为Item。