2010-12-22 92 views
1

例如:我有一個實體,名爲Car,它是抽象。然後有兩個子實體CabrioletPickup核心數據繼承:可以這樣做嗎?

現在我有一個實體名爲Driver,它具有currentCar 1..1與實體Car的關係。因此,我可以將Cabriolet或Pickup分配給任何駕駛員的currentCar屬性。然後,當我從驅動程序獲取currentCar時,我需要反思該對象以在運行時查找是否有Cabriolet或Pickup。這是否是Core Data中的有效設計?

回答

2

我不明白爲什麼這不會在技術層面上工作,但它確實違反了OOP多態性。

爲什麼你需要知道汽車的類型?您能否定義抽象超類(Car)上的方法並在子類中適當地覆蓋它們(CabrioletPickup)?您可以重構汽車層次結構,以便使子類的屬性變得更一般化,並將它們移動到Car的屬性,從而消除對子類的需求?

NSFetchResultsController獲取從公共超類派生的對象時遇到問題。 (返回的對象只能通過實體的屬性進行排序/分組,類型不是屬性,所以不能用於對實體進行排序/分組。我的解決方案/破解是針對超類的type屬性 - 醜陋的,但它工作。)

+0

一輛敞篷車增加了一個BOOL hasElectricRoof。基本上問題是如果我拿到當前的汽車,並且我以前分配過敞篷跑車(也是一輛汽車),那麼我能夠將它投入敞篷車嗎?或者,Core Data不會獲取僅在Cabriolet中定義的屬性? – 2010-12-22 11:50:43