задача c созданием динамического объекта - PullRequest
3 голосов
/ 01 февраля 2010

Быстрый вопрос для вас. Я хочу иметь возможность создать экземпляр объекта. Тип объекта основан на строке.

В php вы можете просто заменить имя класса на строку, но я сомневаюсь, что это легко в Objective c.

NSString * className;
id theObject;
className = @"TestObject";
theObject = [[className alloc] init];

вот разбивка того, на что это может быть похоже. Я хочу попытаться избежать использования гигантского выражения стиля кейса.

Можно ли использовать для этого систему выбора?

есть идеи?

Приветствия

Ответы [ 2 ]

30 голосов
/ 01 февраля 2010

Вы можете получить объект Class динамически с помощью NSClassFromString()

Class c = NSClassFromString(@"ClassName");
id obj = [[c alloc] init];
6 голосов
/ 01 февраля 2010

Вы можете получить класс по его имени, используя одну из следующих функций времени выполнения obj-c (может потребоваться импортировать заголовок:

id objc_lookUpClass(const char *name)
id objc_getClass(const char *name)

Таким образом, ваш код может выглядеть (но не проверял его):

NSString * className = @"TestObject";
id theObject = nil;
Class myClass = objc_lookUpClass([className UTF8String]);
if (myClass)
   theObject = [[myClass alloc] init];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...