Динамически выбирая разные viewControllers - PullRequest
0 голосов
/ 31 октября 2010

У меня есть проблема, которая, я думаю, скорее всего проста, но я не могу обернуться вокруг нее.

У меня есть табличное представление, которое загружается из массива NSDictionaries.У каждого словаря есть заголовок (показанный в строке) и связанная строка nssstring, представляющая контроллер представления, который должен быть помещен в стек при выборе строки.Другими словами, выбор строки «A» должен инициализировать экземпляр «aViewController» и поместить его в стек, выбор строки «B» должен инициализировать экземпляр «bViewController» и поместить его в стек и т. Д.

Изначально я просто жестко закодировал все возможные значения в didSelectRow.Но я бы очень хотел иметь возможность динамически генерировать viewController динамически.Я нашел несколько примеров похожих проблем на C ++, которые привели меня к приведенному ниже коду.Но я не могу понять это правильно и не уверен, что нахожусь на правильном пути для решения задачи c.У кого-нибудь есть мысли?

Вот код didSelectRow, который не работает:

Class cls = [selectedRow valueForKey:@"viewController"]; 
if (cls!= nil)
{
id myNewController = [[cls alloc] init];    
}


[[self navigationController] pushViewController:myNewController animated:YES];
[myController release];

1 Ответ

7 голосов
/ 31 октября 2010

Вы храните фактический класс или имя класса (как NSString) в словаре?

Если значение, которое вы храните в словаре, является строкой NSString, я не думаю, что вы можете просто назначить Class cls = someNSString;

Вы можете, однако, сделать:

NSString *controllerClassName = [selectedRow valueForKey:@"viewController"];
if (controllerClassName != nil) {
     id myNewController = [[NSClassFromString(controllerClassName) alloc] init];
     [[self navigationController] pushViewController:myNewController animated:YES];
     [myNewController release];
}

ИЛИ

Просто сохраните класс в словаре вместо представления NSString:

...