Наследование основных данных: как получить подклассы сущностей во время выполнения? - PullRequest
1 голос
/ 24 ноября 2011

Я получил следующую базовую модель данных:

ParentEntity (аннотация)

  • ChildAEntity, имеющий ParentEntity в качестве родителя

  • ChildBEntity, имеющий ParentEntity в качестве родителя

Как я могу получить во время выполнения Массив моих субтитров (или имен подклассов)?

* РЕДАКТИРОВАТЬ 1

Хорошо, я думаю, что нашел решение, но не уверен.У меня есть способ получить подклассы моего родительского класса.Возможно, я должен просто сделать мои дочерние классы наследующими от моего родительского класса, и я получу свои подклассы.Но что странно для меня, так это то, что xCode не генерирует наследование, когда у сущности есть родитель, а mogenerator делает ...

Как и вы, вы думаете, что большую часть времени, если есть сущность A иsubentity B, сгенерированные классы ClassB должны наследовать classA?

* EDIT 2

Вопрос о получении сущностей объекта из базовой модели данных все еще открыт.Мне любопытно узнать, как это можно сделать ...

Вот как можно получить подклассы из целевого класса C.http://cocoawithlove.com/2010/01/getting-subclasses-of-objective-c-class.html

1 Ответ

0 голосов
/ 27 января 2012

Предположим, у вас есть описание сущности '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.
...