2015-04-29 57 views
0

我有兩個類,MammalsFish,它們都從一般超類Animals繼承。我想使用核心數據存儲我所有的MammalsFish,所以我已經使它們都成爲NSManagedObject的子類。所以,當我想要得到我所有的MammalsFish時,我只是執行一對夫婦獲取請求。如何讓兩個具有相同超類的NSManagedObject類

我的問題是如何處理Animals超類。

  • 它的屬性和方法顯然是由兩個子類使用的,所以它也應該是NSManagedObject呢?
  • 如果是這樣,那麼MammalsFish甚至需要顯式的NSManagedObject子類,因爲它們已經子類Animals
  • 這種方法是否有缺陷?

對不起,如果這是一個超基本的問題,特別是如果答案只是「是;否」。其中一個答案here警告不要在數據模型中使用繼承,因此我擔心。

回答

1

就您的繼承模式是否會在未來將您與您連接起來做出您自己的決定。但在直接回答你的問題你的繼承樹的樣子......

NSManagedObject -> Animal -> Mammals 
          -> Fish 

所以

@interface Animal : NSManagedObject

@interface Fish : Animal

只是,警惕Core-Data不如果您需要在將來升級您的模型並仍然h,那麼請好好進行復雜的重新排列贊成現有的數據。不是不可能的,只是不容易。

+0

感謝您的回覆!所以,除了對模型做出未來的改變之外,@shosti在鏈接問題中的警告在這裏不是一個擔心? (它是:「如果你使用SQL後端,不要在你的數據模型中使用繼承,由於SQL後端的實現,它具有可怕的性能和空間特性」) – Rogare

+1

它可能取決於最終大小你的模型。我以前從未見過這個建議。我可能需要觀看視頻:-)但是我確實有幾個基於CD的項目,它們將繼承應用到三層,對於超過1000年的對象,性能不是問題。當你用超類目的地描述與關係類的根類時,它可能很有用,例如,你可能有一個叫做animalsThatIE的一對多關係,帶有一個動物的目的地,即熊 - >鱒魚,兔子,松鼠,小龍蝦 –

+0

好吧,知道。謝謝! – Rogare

1

使Animals的子類NSManagedObject。 使MammalsFishAnimals的子類。

相關問題