核心数据继承:这样做可以吗?

时间:2010-12-22 10:56:18

标签: objective-c cocoa cocoa-touch core-data ios

示例:我有一个名为Car的实体 abstract 。然后有两个子实体CabrioletPickup

现在我有一个名为Driver的实体,它与实体currentCar之间有一个名为Car 1..1的关系。因此,我可以为任何驾驶员的currentCar属性分配Cabriolet或Pickup。然后,当我从驱动程序获取currentCar时,我需要内省对象以在运行时找到我是否有Cabriolet或Pickup。这是Core Data中的有效设计吗?

1 个答案:

答案 0 :(得分:2)

我不明白为什么这不会在技术层面上起作用,但它确实违反了OOP多态性。

为什么你需要知道汽车的类型?您是否能够在抽象超类(Car)上定义方法并在子类(CabrioletPickup)中适当地覆盖它们?您是否可以重构汽车层次结构,以便子类的属性变得更加通用并将它们移动到Car的属性,从而消除了对子类的需求?

在获取从公共超类派生的对象时,我遇到了NSFetchResultsController的问题。 (返回的对象只能按实体的属性进行排序/分组。类类型不是属性,因此不能用于对实体进行排序/分组。我的解决方案/ hack是type属性的超级 - 丑陋,但它有效。)