我有一个包含3个实体的一级方程式比赛的数据模型:
RacingActor:抽象实体
飞行员:继承自RacingActor
团队:从RacingActor继承
如果我生成NSManagedObject
子类来表示这些实体,则生成的代码根本无法表示这种设计:
一切都继承于NSManagedObject
没有什么可以阻止我实例化RacingActor
试点中的team属性类型为NSManagedObject
而不是Team
这是预期的行为吗?我应该修复Xcode生成的代码吗?我想念什么吗?
顺便说一句,我正在使用Xcode 4.3.3
最佳答案
核心数据的核心是对象关系映射库。很久以前,它被称为企业对象框架,它是WebObjects的一部分。
因此,是的,Core Data管理的任何持久性对象的基础对象都是NSManagedObject
,您可以对它们执行任何操作。
在您的示例中,“团队”和“飞行员”将共享一个公用表,您将能够使用查询立即检索“团队”和“飞行员”。那是主意。
Objective-C继承树(如果使用自定义类)可以镜像定义的模型,但不需要这样做。您可以创建自定义RacingActor
类,将其用作自定义Team
和Pilot
类的基类,也可以告诉模型将RacingActor
用于Team
和Pilot
对象。您甚至可以根据需要为NSManagedObject
和/或Team
定义一个完全不相关的基类(假设Pilot
是直接或间接的父类)。
然后,您可以自由地在控制器或自定义数据类中的业务逻辑中实现所需的特定行为。