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)
您是否在字典中存储实际的类或类名(作为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表示中:
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |