我有一个问题,我认为可能是直截了当但我似乎无法绕过它。
我有一个从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];
答案 0 :(得分: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];
}
或
只需将Class存储在字典中而不是NSString表示中: