UINavigationController停止推送视图

时间:2011-06-28 01:22:43

标签: objective-c ios ipad uitableview uinavigationcontroller

我们使用导航控制器和视图控制器向用户显示问题。一切都工作正常,但我们做了一些UI调整,所以我们可以将应用程序移植到iPad,唯一的变化是使表视图的框架动态在iphone或ipad上。然而,现在当我们从335中得到187问题时,它不再推出新问题了...它推动了一个空白屏幕并且从未调用推送视图控制器的“viewDidLoad”方法,因为它已经过去了187次。我们设置了断点,以确保导航控制器和视图控制器仍然在内存中分配,并且它们是。

以下是每次新推送调用的视图控制器的viewDidLoad ...

- (void)viewDidLoad {
_tableView = [[QuestionTableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];

_tableView.center = CGPointMake(self.view.center.x, self.view.frame.size.height/2);
[_tableView setDataSource:self];
[_tableView setQuestionDelegate:self];
[_tableView setDelegate:self];
_tableView.scrollEnabled = YES;

[_tableView setBackgroundView:[[[UIView alloc] init] autorelease]];
_tableView.directionalLockEnabled = YES;
_tableView.delaysContentTouches = NO;

_tableView.backgroundColor = [UIColor clearColor];
_tableView.opaque = NO;
[self.view addSubview:_tableView];

}

我们推动视图控制器......

[questionsNavigationController pushViewController:viewController animated:YES];

先谢谢了! :)

3 个答案:

答案 0 :(得分:0)

如果你使桌面视图更小,你可以完成整套335个问题吗?你是否每个问题创建一个ViewController?

您可以使用仪器运行项目以检查内存泄漏。

答案 1 :(得分:0)

你真的需要堆叠上的所有问题吗? popViewControllerAnimated怎么样:在推动下一个之前没有NO,也有动画:NO?

它适用于模拟器,因为它的内存是PC的内存。将NSLog放入-didReceiveMemoryWarning方法,以查看内存不足。

答案 2 :(得分:0)

可能你不应该这样使用NavigationController。这太丑了。

我会做以下其中一项:

  • “pop”ViewControllers,后面是5-10个视图(使用setViewController)。换句话说 - 保持5-10个视图,其他视图将被释放(并保存结果)。一旦用户决定返回(并且堆栈中有3-4个视图),重建几个。
  • 自己实现NavigationController行为 - 只需替换视图而不是堆叠它们。用户返回后,使用所需数据重新加载视图。
  • 如果你真的认为你的实现没问题 - 一旦事情变热,尽量从你的视图中释放尽可能多的内存。