CoreData可以处理多态子类吗?

时间:2010-09-30 00:58:21

标签: objective-c core-data

我有一个名为Item:

的CoreData模型(托管对象)
@interface Item :  NSManagedObject {
  NSString * type;
}
@property (retain) NSString * type;
@end

我还有两个子类:

@interface Circle : Item
@end

@interface Square : Item
@end

我通过type属性跟踪项目的子类。

当我获取Items时,我会找回一系列项目。但我希望能够根据type动态地对项目进行类型转换。

CoreData本机支持吗?如果没有,有没有办法动态地对每个Item

进行类型化

我可以获得我想要将Item转换为类的类:

Item * item = ...;
id klass = NSClassFromString(item.type);

我只是不知道如何将item转换为klass类型。

1 个答案:

答案 0 :(得分:28)

是的,它是内置的。您不必手动完成。您甚至不必自己输入type条目。

在Objective-C中有超类/子类的概念。 相应地,在核心数据中,存在父实体/子实体的概念。这可以在模型文件中指定。

在核心数据建模器中,通过继承您的Circle实体,创建两个实体SquareItem。您可以在建模器中指定实体的parent。然后,在建模器中,为实体Circle指定自定义类Circle,为实体Square指定类Square

然后,当您从数据库中获取托管对象时,将自动分配正确的类。 阅读建模者的documentation

同样,一切都可以在建模师中完成,无需你写任何东西。