2010-10-19 46 views
1

比方說,我有一個繼承層次如下:如何更改NSManagedObject的類型?

設備< - EthernetDevice < - WirelessDevice

所以無線設備EthernetDevice,這是設備的子類的子類。

好的,所以如果用戶創建一個設備對象,然後用戶決定它實際上是一個無線設備,我該如何改變對象的類型?目前,我正在創建一個新的WirelessDevice管理對象,並基本上遍歷Device對象的每個屬性,並將其分配給WirelessDevice對象的相同屬性。然後告訴ManagedObjectContext刪除Device對象。這是最簡單的方法嗎?是否有一種形式的類型轉換或複製樣式方法也會通知ManagedObjectContext這個變化?

謝謝

回答

0

首先,與核心數據,你通常希望避免繼承。如果你想成爲能夠方便地從EthernetDevice到WirelessDevice切換,我只想對設備實體與「型」與值由枚舉型類似這樣的屬性:

typedef enum _DeviceTypes{ 
    EthernetDeviceType, 
    WirelessDeviceType 
} 

這樣更改從一種類型到另一種類型更改一個值更簡單。你的EthernetDevice類和你的WirelessDevice類的方法有什麼不同?如果它們截然不同,那麼創建一個新實體並刪除舊實體可能實際上是最簡單的方法(整個代碼中的大量switch(){}塊可以從可讀性等方面帶走)。