动态选择不同的viewControllers

Mar*_*tin 0 iphone objective-c dynamic-typing uiviewcontroller

我有一个问题,我认为可能是直截了当但我似乎无法绕过它.

我有一个从一系列NSDictionaries加载的tableview.每个Dictionary都有一个标题(显示在行中)和一个关联的nssstring,表示一个viewcontroller,当选择该行时应该将其压入堆栈.换句话说,选择行"A"需要初始化"aViewController"的实例并将其推送到堆栈上,选择行"B"需要初始化"bViewController"的实例并将其推送到堆栈等.

我最初只是将所有可能的值硬编码到didSelectRow中.但我真的希望能够动态地动态生成viewController.我找到了几个类似问题的C++示例,这些示例使我得到了下面的代码.但我似乎无法做到正确,并且我不确定我是否正在寻找一个客观的解决方案.有人有什么想法?

这是didSelectRow代码不起作用:

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


[[self navigationController] pushViewController:myNewController animated:YES];
[myController release];
Run Code Online (Sandbox Code Playgroud)

Geo*_*rge 7

您是否在字典中存储实际的类或类名(作为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];
}
Run Code Online (Sandbox Code Playgroud)

要么

只需将Class存储在字典中而不是NSString表示中: