CoreData可以处理多态子类吗?

Aar*_*ler 19 core-data objective-c

我有一个名为Item的CoreData模型(托管对象):

@interface Item :  NSManagedObject {
  NSString * type;
}
@property (retain) NSString * type;
@end
Run Code Online (Sandbox Code Playgroud)

我还有两个Item的子类:

@interface Circle : Item
@end

@interface Square : Item
@end
Run Code Online (Sandbox Code Playgroud)

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

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

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

我可以得到我想要的类,Item如:

Item * item = ...;
id klass = NSClassFromString(item.type);
Run Code Online (Sandbox Code Playgroud)

我只是不知道我怎么能投item出类型klass.

Yuj*_*uji 28

是的它是内置的.您不必手动完成.你甚至不必自己把这个type条目.

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

在Core Data建模器中,创建两个实体CircleSquare继承您的Item实体.您可以parent在建模器中指定实体.然后,在建模中,指定自定义类Circle对你的实体Circle,类Square为实体Square.

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

同样,一切都可以在建模器中完成,无需编写任何内容.

  • 谢谢你的答案 - 虽然链接已经破了,请你更新一下吗? (3认同)
  • 谢谢!不知道要搜索什么令人沮丧.难怪"子类"和"多态"没有返回结果!正如笔记所述,**核心数据编程指南:托管对象模型**在**实体继承**和**抽象实体**http://developer.apple.com部分下有更多深入的信息. /library/mac/#documentation/cocoa/conceptual/CoreData/Articles/cdMOM.html (2认同)