我的应用程序使用 UINavigationController 来显示不同的 UITableViewControllers。但是有一个非常奇怪的行为:将 UITableViewController 推送到导航控制器只有在动画pushViewController:animated:
设置为NO时才有效。
[navController pushViewController:tableController animated:NO]
将动画设置为YES只会在显示 tableController 视图之前冻结应用程序。此时没有异常或错误。最后,应用程序在投掷几分钟后崩溃EXC_??? (11) (code=0, subcode=0x0)
。但是,这是什么意思?
更多信息:
所有控制器和视图都以编程方式加载。第一的:
UITableViewController *tableController1 = [[UITableViewController alloc] init];
navController = [[UINavigationController alloc] initWithRootViewController:tableController1]
[self.view addSubview:navController.view];
单击按钮后,tableController2 设置为:
UITableViewController *tableController2 = [[UITableViewController alloc] init];
[navController pushViewController:tableController2 animated:NO];
// -> NO works, YES freezes
为了分析tableController2,我还创建了一个自己的tableViewController。结果是:点击按钮加载第二个表格视图控制器后,viewWillAppear
调用所有方法。viewDidAppear
未调用且未显示视图。
有人知道如何找到解决此问题的解决方案吗?或任何想法,我的代码中可能缺少什么?注释掉一堆代码并调试几个小时并没有帮助......
编辑:
正如评论中提到的,最好更换[self.view addSubview:navController.view];
. 所以我更改了我的代码并将导航控制器 init 移动到appDelegate。但没有成功,仍然是相同的行为。
UITableViewController *tableController1 = [[UITableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tableController1];
NSArray* controllers = [NSArray arrayWithObjects:navController, ..., nil];
tabBarController.viewControllers = controllers;
tabBarController
只是应用程序的rootViewController。这不应影响导航控制器及其控制器。