Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 动态选择不同的视图控制器_Iphone_Objective C_Uiviewcontroller_Dynamic Typing - Fatal编程技术网

Iphone 动态选择不同的视图控制器

Iphone 动态选择不同的视图控制器,iphone,objective-c,uiviewcontroller,dynamic-typing,Iphone,Objective C,Uiviewcontroller,Dynamic Typing,我有一个问题,我认为可能是直截了当的,但我似乎无法集中注意力 我有一个从一系列字典加载的tableview。每个字典都有一个标题(显示在该行中)和一个关联的nssstring,表示当选择该行时应推送到堆栈上的viewcontroller。换句话说,选择行“A”需要初始化“aViewController”的实例并将其推送到堆栈上,选择行“B”需要初始化“bViewController”的实例并将其推送到堆栈上,等等 我最初只是将所有可能的值硬编码到didSelectRow中。但是我真的希望能够动态

我有一个问题,我认为可能是直截了当的,但我似乎无法集中注意力

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

我最初只是将所有可能的值硬编码到didSelectRow中。但是我真的希望能够动态地生成viewController。我发现了几个类似的问题的C++例子,这些代码引导我进入下面的代码。但我似乎无法正确地使用objective-c解决方案,也不确定自己是否走上了正确的道路。有人有什么想法吗

以下是不起作用的didSelectRow代码:

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


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

您是在字典中存储实际类还是类名(作为NSString)

如果您在字典中存储的值是一个NSString,我认为您不能只分配类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表示:

“NSClassFromString”。如此明显,如此直观,但当你不知所措时,却很难找到。谢谢你的帮助!