Instantiate Class Programmatically in iOS

Я работаю над большим проектом iOS, дизайн не такой красивый, как хотелось бы, но я должен его придерживаться. (жизнь иногда бывает сукой).

Дело в том, что у нас есть библиотека, которая в основном позволяет просматривать каталог. У вас есть фильтр, где вы указываете определенные критерии поиска, и вам представляется список, в котором вы можете нажать на интересующие вас элементы. Когда вы нажимаете на элемент, вы можете увидеть его более подробное описание.

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

Для примера представьте, что в моей библиотеке есть 2 класса, которые управляют двумя представлениями. Это "FilterViewController" и "DetailsViewControllers". В каком-то месте кода эти классы инстанцируются. Это будет выглядеть примерно так

Class diagram schema

Мой подход примерно такой:

сторона ProjectA

// Here I configure the library
Library.FilterViewClass = ProjectAFilterViewController;
Library.DetailsViewClass = ProjectADetailViewController;

сторона ProjectB

Library.FilterViewClass = ProjectBFilterViewController;
Library.DetailsViewClass = nil;

сторона библиотеки

// Did the user configure the library?
if(self.FilterViewClass == nil){
    // I alloc the default ViewController
    myFilterViewController = [[FilterViewController alloc] init]; 
}else{
    // Here I would like to alloc the custom ViewController
    myFilterViewController = [[Library.FilterViewClass alloc] init]; // DaProblem!
}

Проблема с этим подходом в том, что я не знаю, можно ли программно инстанцировать объект. Или, по крайней мере, я не знаю как. Возможно, я использую неправильный подход, и я был бы признателен за подсказку. Заранее спасибо!

7
задан Ignacio Oroná 24 November 2011 в 16:13
поделиться