2.8 创建NSManagedObject的子类

托管对象模型就位之后,我们就该根据Item实体来创建NSManagedObject的子类了。有了这些子类文件,就可以在对象上面直接用“点”(.)来操作数据了,而不用再编写SQL查询语句。如果将来模型变了,那么就需要按照下面所讲的流程重新生成这些文件。尽管开发者也可以在这些生成的文件里自行添加方法,但笔者觉得不应该这么做,因为重新生成之后,原来所做的修改就会丢失。假如确实需要添加自定义的方法,那么可以从中继承子类,或是针对生成的文件创建类目。

请按下列步骤修改Grocery Dude,以便生成与NSManagedObject子类相关的文件:

1.选中Item实体。

2.点击Editor>Create NSManagedObject Subclass...菜单项。

3.确保Model处于勾选状态,然后点击Next按钮。

4.勾选Item实体,然后点击Next按钮。

5.确保Targets中的Grocery Dude已处于勾选状态。

6.不要勾选Use scalar properties for primitive data types。

7.确保文件保存在Grocery Dude项目的目录之下,然后点击Create按钮。

执行完上述步骤之后,Xcode项目里会多出来两个新文件,分别是Item.h和Item.m。这两个文件都是根据Item实体生成的,程序清单2-1列出了Item.h的代码。各特性的出现顺序可能与书中不同。

程序清单2-1 Item.h

请注意,实体中各个属性的类型与生成的类中各个特性的类型是稍有区别的。下面总结了实体的属性与托管对象的特性是如何对应起来的:

·实体中的Date属性会成为类里的NSDate特性。

·实体中的String属性会成为类里的NSString特性。

·实体中的Decimal属性会成为类里的NSDecimalNumber特性,而其他各种数值数据类型会成为类里的NSNumber特性。

·实体中的Binary Data属性会成为类里的NSData特性。

·实体中的Tranformable属性,会成为类里的id特性。

查看一下Item.m文件就会发现,实现文件只是给各个特性都添加了@dynamic修饰符而已。Core Data用这种方式告诉大家:获取及设置特性值所需的方法都会动态地生成,不用开发者自己去实现。