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

cfi*_*her 16 xcode abstract-class core-data nsmanagedobject

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

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

在此输入图像描述

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

  • 一切都继承自 NSManagedObject
  • 没有什么能阻止我实例化RacingActor
  • Pilot中的团队属性是NSManagedObject团队而非团队

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

顺便说一下,我正在使用Xcode 4.3.3

fab*_*ier 12

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

所以,是的,Core Data管理的任何持久对象的基础对象都是NSManagedObject,你可以随心所欲地做任何事情.

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

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

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

  • 除非您的数据集非常小,否则我建议不要在核心数据中进行继承.继承性能会很快降低性能.请参阅http://stackoverflow.com/questions/5276369/prevent-core-data-from-combining-entities-into-one-table?lq=1和http://stackoverflow.com/questions/6917494/core-data - 性能与 - 单亲实体?LQ = 1. (5认同)