2011-06-28 94 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行爲 - 只是替換視圖而不是堆疊它們。一旦用戶回來,重新加載視圖與所需的數據。
  • 如果你真的認爲你的實現是好的 - 儘量從視圖中釋放盡可能多的內存,一旦事情變熱了。
相關問題