核心数据继承:如何在运行时获取实体子类?

时间:2011-11-24 10:55:05

标签: objective-c inheritance core-data entity subclass

我得到了以下核心数据模型:

ParentEntity(摘要)

  • 以ParentEntity为父级的ChildAEntity

  • 将ParentEntity作为父级的ChildBEntity

我怎么能在运行时得到一个我的子实体数组(或子类名)?

*编辑1

好的我觉得我有一个解决方案,但不确定。我找到了检索父类的子类。也许我应该让我的子类继承我的父类,我将检索我的子类。但令我感到奇怪的是,当一个实体有一个父节点但是生成器时,xCode不会生成继承......

正如我所认为的那样,大多数情况下,如果得到实体A和子实体B,生成的类ClassB应该继承classA?

*编辑2

关于从核心数据模型中检索实体子实体的问题仍然存在。我很想知道如何做到这一点......

以下是如何从目标C类中获取子类。 http://cocoawithlove.com/2010/01/getting-subclasses-of-objective-c-class.html

1 个答案:

答案 0 :(得分:0)

假设你有一个实体描述'e',那么你可以通过调用'e.subentities'来获取子实体,它返回一组实体描述。每个实体描述都知道其托管对象类名。现在你可以把它结合起来:

NSEntityDescription *e = ...;
NSArray *subentities = e.subentities;
NSArray *managedObjectClassNames = [subentities valueForKey:@"managedObjectClassName"];

// managedObjectClassNames contains the class names.

或者你可以在没有KVC魔法的情况下做到这一点:

NSEntityDescription *e = ...;
NSArray *subentities = e.subentities;
NSMutableArray *managedObjectClassNames = [NSMutableArray array];
for(NSEntityDescription *subentity in subentities) {
    NSString *managedObjectClassName = subentity.managedObjectClassName;
    if(managedObjectClassName != nil) {
        [managedObjectClassNames addObject:managedObjectClassName];
    }
}

// managedObjectClassNames contains the class names.