我遇到问题让我的导航控制器正常运行!如果我在RootViewController中单击表格的单元格,它似乎不是下一个ViewController。
错误消息读取
“应用程序试图在目标上推送一个nil视图控制器 。”
所以我分配了一些错误的东西,我的猜测,我可能错过了我所关注的书中的重要内容。
因此问题出现在我的RootViewController.m中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UINavigationController *navigationController= [[UINavigationController alloc]init];
switch ([indexPath row]) {
case 0:
[navigationController pushViewController:kundeViewCon animated:YES];
break;
case 1:
[navigationController pushViewController:kalenderViewCon animated:YES];
break;
case 2:
[navigationController pushViewController:wunschViewCon animated:YES];
break;
}
}
在我的AppDelegate.m中,我正在做以下事情来设置RootViewController作为NavigationController:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
// Navigation Controller
RootViewController *rootViewController = [[RootViewController alloc]init];
navigationController = [[UINavigationController alloc]initWithRootViewController:rootViewController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
所以当我点击Cell时,我得到了我想要推送的所有其他ViewControllers。我只是看不出自己的错或我错过了什么!?
也许有人可以帮助我并给我一个提示!那太好了!
答案 0 :(得分:5)
RootViewController
已经有了它的导航控制器 - 你在app delegate中创建了它。选择单元格时创建新的导航控制器没有意义。它应该看起来更像这样:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch ([indexPath row]) {
case 0:
[self.navigationController pushViewController:kundeViewCon animated:YES];
break;
case 1:
[self.navigationController pushViewController:kalenderViewCon animated:YES];
break;
case 2:
[self.navigationController pushViewController:wunschViewCon animated:YES];
break;
}
}
此外,只需确保在致电-pushViewController:animated:
时,视图控制器(即kundleViewCon
,kalenderViewCon
和wunschViewCon
)均为非零。它们看起来像实例变量或属性 - 只需确保在代码中早先分配/启动它们,例如在-viewDidLoad
中。
答案 1 :(得分:1)
您不必创建新的UINavigationController。你需要从当前窗口获取控制器。
[self.navigationController pushViewController:yourController animated:YES];
其中yourController是您实例化的UIViewController之一(kundeViewCon,kalenderViewCon或wunschViewCon)
答案 2 :(得分:1)
对于Google员工:
如果您未将ViewController连接到:
,也可能会发生这种情况
"<Your Project> App Delegate"
如果你不这样做,那么你的控制器就不会被初始化。
您还需要将ViewController的类重命名为相应的.h / .m文件:
打开xib文件 - &gt;选择你的ViewController - &gt;转到“身份检查员” - &gt;输入 Textfield“Class”您对应的.h / .m文件的名称。
将ViewController连接到App 右键单击并从... AppDelegate拖动到ViewController 发布后点击相应的条目: