核心数据中的抽象实体和继承

时间:2012-07-08 17:50:46

标签: xcode core-data abstract-class nsmanagedobject

我有一个包含3个实体的一级方程式比赛的数据模型:

  • RacingActor:抽象实体
  • Pilot:继承自RacingActor
  • 团队:继承自RacingActor

enter image description here

如果我生成NSManagedObject个子类来表示这些实体,那么生成的代码根本不代表这个设计:

  • 所有内容都来自NSManagedObject
  • 没有什么可以阻止我实例化RacingActor
  • Pilot中的团队属性属于NSManagedObject而非团队

这是预期的行为吗?我应该修复Xcode生成的代码吗?我错过了什么吗?

BTW,我正在使用Xcode 4.3.3

1 个答案:

答案 0 :(得分:11)

核心数据核心是对象关系映射库。很久以前它被称为Entreprise Object Framework,是WebObjects的一部分。

所以,核心数据管理的任何持久对象的基础对象都是NSManagedObject,你可以随心所欲地做任何事情。

在您的示例中,Team和Pilot将共享一个公共表,您将能够使用查询立即检索团队和飞行员。这就是主意。

Objective-C继承树(如果使用自定义类)可以镜像您定义的模型,但它不需要。您可以创建自定义RacingActor类,将其用作自定义TeamPilot类的基类,或者您可以告诉模型使用RacingActor作为{{1} }和Team个对象。如果您愿意,您甚至可以为Pilot和/或NSManagedObject定义一个完全不相关的基类(如果Team是父,直接或间接)。

然后,您可以在控制器或自定义数据类中自由地实现业务逻辑中所需的特定行为。