假设我有一个继承层次结构如下:
设备< - EthernetDevice< - WirelessDevice
因此,无线设备是EthernetDevice的子类,它是Device的子类。
好的,所以如果用户创建了一个Device对象并且用户稍后决定它实际上是一个无线设备,我该如何更改对象的类型?目前我正在创建一个新的WirelessDevice托管对象,并基本上移动Device对象的每个属性并将其分配给WirelessDevice对象的相同属性。然后告诉ManagedObjectContext删除Device对象。这是最简单的方法吗?是否有一种形式的类型转换或复制样式方法,它还通知ManagedObjectContext更改?
由于
答案 0 :(得分:0)
首先,使用Core Data,您通常希望避免继承。如果您希望能够方便地从EthernetDevice切换到WirelessDevice,我会在Device实体上使用“type”属性,其枚举值类似于:
typedef enum _DeviceTypes{
EthernetDeviceType,
WirelessDeviceType
}
这种方式从一种类型转换到另一种类型更简单的是改变一个值。 EthernetDevice类与WirelessDevice类的方法有何不同?如果它们完全不同,那么创建一个新实体并删除旧实体可能实际上是最简单的方法(大量的switch(){}阻止你的代码可以带走可读性等等。