Создайте подкласс класса, используя родительский init - из другого класса

Изменить: этот синдром понижения голосов здесь сосет большое время. Я задал вопрос, где, по моему мнению, показал, что сделал домашнее задание, и попросил совета. Поднятые ответы подразумевали использование предупреждений во время компиляции, в то время как мой собственный и, вероятно, самый чистый способ ООП не получил никакого интереса.

Краткий обзор, чтобы понять, зачем мне это нужно и что я пытаюсь сделать: я пишу ORM, который реализует шаблон отображения данных. Картограф (то есть для результатов SQLite) должен создать подклассы класса сущности - используя инициализатор базового класса сущности. Так что есть проблема.

Картограф не знает и не должен знать о конкретных классах. Описания отображений и конкретные сопоставители для различных источников данных абстрагируются от класса сущности и являются частью дизайна описания сущности.

Объекты похожи на NSManagedObject, хотя ORM следует другому шаблону. Описание, с которым создается любая сущность, аналогично NSEntityDescription (но также следует другому шаблону и назначению).

Поэтому моя цель - создать сущности, которые, как я знаю, являются подклассами ManagedEntity, с использованием метода init ManagedEntity.

Итак, инициализация моего картографа выглядит так:

- (id)initWithEntityClass:(Class)EntityClass entityDescriptor:(EntityDescription*)entityDescriptor
{
self = [super init];
if (self)
{
    _EntityClass = EntityClass; 
    _entityDescription = entityDescription;

    ... (assert that class is of subclass of ManagedEntity)
}

И через некоторое время в моем картографе я хочу создать конкретную сущность:

-(void)createEntityWithSQLiteResultSet:(sqlite3_stmt*)resultSet
{
    // Problem: How to init a class known to be a subclass of ManagedEntity?  
    ManagedEntity *newEntity = [[_EntityClass] alloc]     initWithEntityDescription:_entityDescription];
}

Итак, как мне создать этот дочерний класс ManagedEntity, используя init ManagedEntity?

Конечно, я мог бы использовать responsedsToSelector () для initWithEntityDescription и вызывать это. Но что-то подсказывает мне, что должен быть более элегантный способ, когда класс уже известен. Кроме того, RespondsToSelector и вызов селектора будут выполнять только проверку во время выполнения. Несмотря на то, что инициализатор сущности не должен изменяться, кажется плохим выбором потерять проверку времени компиляции, если этот метод существует.