我的应用使用UINavigationController来显示不同的UITableViewControllers。但是有一个非常奇怪的行为:只有在pushViewController:animated:
中的动画设置为NO时,才能将UITableViewController推送到导航控制器。UINavigationController弹出/推送UITableViewController仅适用于动画: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。这不应该影响导航控制器及其控制器。
我认为你是在破坏记忆。使用仪器并检查内存和泄漏。 – 2013-03-23 23:25:43
您不应该将navController的视图添加为self.view的子视图。唯一正确的做法是将navController作为self的子视图控制器添加,并使用自定义容器控制器api。 – rdelmar 2013-03-23 23:40:15
@rdelmar我修复了我的代码并替换了'[self.view addSubView:]'(请参阅我的问题的编辑)。但我仍然有同样的行为。 – mixable 2013-03-24 09:58:23