《Core Data应用开发实践指南》一2.3 实体

2.3 实体

托管对象模型由一系列实体描述对象构成,这种对象就叫做实体。实体就好比一把饼干模型切割刀,用于创建托管对象。有了托管对象之后,我们就可以用Objective-C代码来操作其中的数据了。
托管对象模型可以拥有一个或多个实体,每个应用程序的实体数量会有所差别。在制作托管对象之前,首先要把每个“饼干模型切割刀”(也就是实体)设计好。实体的设计与传统数据库中数据表的设计是相似的。
在设计数据库中的数据表时,你需要完成下列内容:
配置数据表名称(table name)。
配置字段(field)并为每个字段设定“数据类型”(data type)。
而在设计实体时,你需要做的则是:
配置实体名称(entity name)。
配置属性,并为每个属性设定数据类型。
根据实体来配置NSManagedObject的子类(该项可选)。
正如数据库中的表有字段一样,实体也有属性。属性必须有特定的数据类型(比方说字符串或整数)。如果想从实体中创建托管对象,那我们通常会根据实体来创建NSManagedObject的子类,但这并不是强制性的。采用NSManagedObject的子类确实有好处,比如可以在托管对象后面使用“点符号”(.)访问相关属性,这样可以令代码更易阅读。无论是从NSManagedObject类还是从NSManagedObject的子类创建实例,我们都可以通过托管对象这种形式来操作数据。用数据库领域的术语来说,托管对象的实例类似于数据库中某张数据表里的一行(row)。实体的名称与根据该实体创建出来的NSManagedObject子类的名称通常是一样的。根据实体来创建托管对象时,在实体中配置好的那些属性也会变成托管对象里的特性。图2-2演示了实体是如何在持久化存储区中的数据库与托管对象之间建立映射关系的。

实体是托管对象模型的基础,因为它可以把同一个范围内的数据从逻辑上组织起来。设计托管对象模型的时候,至关重要的一件事就是给实体起名字。给实体所起的名字应该由一两个英文单词构成,它要能描述出实体所表示的数据。Grocery Dude程序的用户要能够把待购买的东西放到购物清单中。用户外出购物时,可能会把“苹果”和“橘子”添加到购物清单里。而想到这一点之后,我们就会觉得:这个用来表示购物清单里待购物品的实体可能起名叫做“水果”会比较好。
在配置实体的时候一定要谨慎:为实体起的名字需要稍微通用一些,以便适应将来的变化,同时还必须足够具体,以便明确描述出它所表示的数据。有时候名字很好起,而有时候则必须反复权衡,需要根据应用程序当前和以后的功能来精心选择恰当的实体名称。由于购物清单里面不是只有水果,所以用“Item”(货品)作为实体名称,应该比“水果”更能准确地描述出清单中的待买物品。
请按下列步骤修改Grocery Dude,以便添加Item实体:

  1. 选定Model.xcdatamodeld。
  2. 点击Add Entity。
  3. 把新实体的名称改为Item。
时间: 2025-01-17 02:14:47

《Core Data应用开发实践指南》一2.3 实体的相关文章

《Core Data应用开发实践指南》一3.5 通过迁移管理器来迁移数据

3.5 通过迁移管理器来迁移数据 除了通过NSPersistentStoreCoordinator来迁移存储区之外,还可以采用迁移管理器来做.迁移管理器可以使开发者全权掌控迁移过程中创建的文件,从而令他们能够按自己的方式来灵活处理迁移中的各种问题.使用迁移管理器的一个好处就是可以向用户报告迁移进度,使用户知道应用程序哪次会启动得比较慢一些,所以需要耐心等待.虽说迁移过程理应执行得非常快才对,但当数据库比较大.变动比较复杂时,迁移过程就需要耗费一定的时间了.为了使用户界面保持流畅,迁移过程必须在后

《Core Data应用开发实践指南》一1.2 Core Data的适用场合

1.2 Core Data的适用场合 如果应用程序要保存的设置数据太多,以致NSUserDefaults及"特性列表"(property list)这种简单的存储方案无法应付,那么就会出现内存占用量方面的问题.解决办法是直接使用数据库或通过Core Data来间接操作数据库.选用Core Data的好处是,不用再花时间编写数据库接口的代码了.此外,你还将享受性能方面的优势,而且可以使用诸如撤销及验证等强大的功能.假如选择直接使用数据库,那就要花时间去做开发与测试工作,也就是通常所说的&

《Core Data应用开发实践指南》一3.1 修改托管对象模型

3.1 修改托管对象模型 在应用程序的进化过程中,其托管对象模型也可能需要改变.对于一些比较简单的修改,诸如设定属性的默认值.设定验证规则.使用获取请求模板等,是可以直接实施的.而对于另外一些更为结构化的(structural)修改,则需先把持久化存储区迁移到新的模型版本才行.假如没有提供迁移数据所需的映射与设定,那么应用程序就会崩溃.为了继续构建范例程序,需要把上一章中的代码添加到Grocery Dude项目中.或者可以去http://www.timroadley.com/LearningCo

《Core Data应用开发实践指南》一2.2 添加托管对象模型

2.2 添加托管对象模型 在第1章中,我们通过CoreDataHelper.m文件里的mergedModelFromBundles方法初始化了托管对象模型.然而现在的问题是:项目里根本就没有模型可用!如果连模型都没有的话,那Core Data就彻底失去意义了,所以,我们这个时候应该创建模型文件.模型文件一般会含有"对象图",而对象图则用来表示应用程序的数据结构以及其他一些可以简化应用程序开发的东西,我们稍后再来解释.请按下列步骤修改Grocery Dude,以便添加数据模型文件: 在现

《Core Data应用开发实践指南》一第1章 初次尝试Core Data应用程序

第1章 初次尝试Core Data应用程序 如果不能把一件事用简单的话说清楚,那就表明你理解得还不够透彻.-阿尔伯特•爱因斯坦"体验式学习"(kinesthetic learning)或者说"从实践中学习"(learning by doing),是接收并记住信息的绝佳手段.即便对于许多有经验的程序员来说,Core Data也是个相当棘手的话题,于是,笔者就适时地编写了你手中的这本书,它以实践的方式来讲解Core Data.本书不会过早地讲解一些比较难懂的话题,本章只

《Core Data应用开发实践指南》一1.3 创建Grocery Dude项目

1.3 创建Grocery Dude项目 Grocery Dude是个运行在iPhone上的范例程序,在学习本书的过程中,你将了解到它的制作流程.学会了Core Data中的某个特性或某项开发技巧之后,你可以将其运用在Grocery Dude程序上面.到了本书收尾的时候,你将会制作好一款功能完备而且运行速度很快的Code Data程序,它能够同iCloud紧密地集成在一起.假如你现在就想直接看看成品,那可以去App Store下载Grocery Dude.请注意,Grocery Dude是专门为

《Core Data应用开发实践指南》一3.3 轻量级的迁移方式

3.3 轻量级的迁移方式 把新模型设为当前版本之后,必须迁移现有的持久化存储区,只有这样,才能正常使用新模型.这是因为,持久化存储区协调器会试着用新版的模型来打开原有的存储区,但由于原有的存储区是用旧版模型创建的,所以该操作会失败.在向NSPersis-tentStoreCoordinator添加存储区的时候,只需将下列选项放在NSDictionary里传过去,即可自动完成存储区的迁移工作:如果传给NSPersistentStoreCoordinator的NSMigratePersistentS

《Core Data应用开发实践指南》一1.4 为现有的应用程序添加Core Data支持

1.4 为现有的应用程序添加Core Data支持 在Xcode中创建iOS应用程序项目时,可以使用各种起始模板(starting-point template).假如要根据Master-Detail.Utility Application或Empty Application等模板来创建项目,那么只需勾选Use Core Data,即可在项目中使用Core Data.不过,Grocery Dude项目是根据Single View Application模板创建的,它起初并没有包含Core Dat

《Core Data应用开发实践指南》一2.12 后端SQL的可见性

2.12 后端SQL的可见性 如果只在控制台的日志中查看Core Data所输出的结果,那么意义并不算太大.你知不知道这些事情背后究竟发生了什么?Core Data对持久化存储区中的数据到底进行了哪些操作?这些操作是否恰当?为了提供无缝的Core Data体验,系统都生成了哪些SQL查询语句?每次在模拟器中运行程序的时候,是不是会插入重复的对象? 有个极其详尽的调试选项可以提供足够的信息,告诉你这些操作背后所发生的事情,从而令你知道上述那些问题的答案.这个调试选项会把系统自动生成的SQL查询语句

《Core Data应用开发实践指南》一2.13 获取托管对象

2.13 获取托管对象 想操作托管对象上下文中的现有数据,就必须先把它获取(fetch)过来.假如待获取的数据没有放在上下文里,那么Core Data会从底层的持久化存储区里把它拿出来,这个过程对开发者来说是透明的.要执行获取操作,就得有NSFetchRequest实例,该实例会返回NSArray,这个数组里面的元素都是托管对象.在执行获取操作的时候,NSFetchRequest会根据特定的实体,把每个托管对象都放在NSArray这个数组中,并将其返回给调用者.用SQL数据库领域的术语来说,获取