2011-06-28 99 views
0

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

这里是被称为每次新推视图控制器的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]; 

在先进的感谢! :)

+0

也只是想提一提,如果我们在模拟器中运行它没有问题......如果我们在ipad或ipad2上运行它,我们有上面列出的问题 – kilabyte

+4

您在导航堆栈上有187个视图控制器?我会从那里开始... –

+0

没有它的同一个控制器被推入不同的表数据。 – kilabyte

回答

0

如果您使tableview更小,您可以通过整套335个问题?你是否为每个问题创建一个ViewController?

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

+0

它与相同的视图控制器被不同的表数据推送,所以我们重用视图控制器视图,但从数组中的不同对象填充它。 – kilabyte

+0

是试图寻找泄漏,并没有什么 – kilabyte

+0

它可能是有问题的问题细节viewController的问题187的数据中有什么特别的东西?你说你做了tableView _smaller_,你到底做了什么? – werner

0

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

它在模拟器上工作,因为它的内存是PC的内存。将NSLog放入-didReceiveMemoryWarning方法中以查看内存不足。

0

也许你不应该这样使用NavigationController。它很丑。

我会做下列之一:

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