我有一个名为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
类型。
答案 0 :(得分:28)
是的,它是内置的。您不必手动完成。您甚至不必自己输入type
条目。
在Objective-C中有超类/子类的概念。 相应地,在核心数据中,存在父实体/子实体的概念。这可以在模型文件中指定。
在核心数据建模器中,通过继承您的Circle
实体,创建两个实体Square
和Item
。您可以在建模器中指定实体的parent
。然后,在建模器中,为实体Circle
指定自定义类Circle
,为实体Square
指定类Square
。
然后,当您从数据库中获取托管对象时,将自动分配正确的类。 阅读建模者的documentation。
同样,一切都可以在建模师中完成,无需你写任何东西。