2011-03-16 48 views
3

這使我瘋狂。我正在使用three20的TTTableViewController,當我收到內存警告時,屏幕變白。現在,看完三大20谷歌組似乎是tableView得到釋放。但是,我不能爲了我的生活找出一個支票,看看是否是這種情況,然後重新創建它。three20 - TTTableViewController內存警告給出黑屏,如何解決?

我所用,因爲我認爲這將解決該問題下面,但它似乎不滿足if語句:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    // If we don't have a datasource we need to reset it 
    if (!self.dataSource) { 
     // Create datasource again 
    } 

}//end 

有誰知道做什麼的時候出現這種情況?谷歌集團一直沒有幫助。

回答

0

您是否繼承了TTTableViewController?我以前沒有用過,但假設它就像UITableViewController ...

你的「viewDidUnload」是怎麼樣的?你在這裏發佈tableview嗎?如果是這樣,你需要在viewDidLoad中創建tableview來匹配它。

不需要檢查viewDidAppear中的dataSource是否可用,因爲如果您閱讀View編程指南,它會解釋內存警告將調用「viewDidUnload」,以便您清除在「viewDidLoad」中創建的數據。

+0

不,我不是繼承它。在我的viewDidUnload方法中,我什麼都沒有,所以在三二十的某個地方它正在被釋放。 – 2011-03-16 23:57:26

+0

你可以分享代碼添加tttbc到你的視圖的方法嗎? – 2011-03-17 06:16:20

0

我有同樣的問題,它也讓我瘋了。

沒有人在three20文檔中提到它,但不應該使用UIViewController的initWithNibName函數來添加子視圖。如果這樣做,內存警告將釋放這些子視圖。

嘗試將代碼從initWithNibName函數移至viewDidLoad函數。我注意到一些代碼需要保存在initWithNibName中,比如導航樣式。但是,添加到控制器視圖的任何子視圖都應該放在viewDidLoad函數中。

0

一般來說,您應該小心地設置viewDidLoad而不是類構造函數的視圖。例如,您應該在viewDidLoad而不是您的啓動器視圖控制器的構造函數中設置啓動器視圖,否則在內存警告後您的啓動器將變爲空。

在TTTableViewController的情況下,但這通常不適用,因爲您沒有手動設置表視圖。我遇到了同樣的問題,並最終追查下來:我重新定義了viewWillDisappear:,並忘記了撥打[super viewWillDisappear:animated]。這意味着Three20控制器維護的關於視圖狀態的一些標誌未被正確更新。

我還發現在調用super之前重新定義didReceiveMemoryWarning以致電[self setEditing:NO]是有益的;我發現表格視圖的狀態會變得很混亂(如果你沒有使用表格的編輯模式,這是不相關的)。

最後,在Three20中有一個錯誤,這意味着在加載/空/錯誤模式下的表將不會被正確恢復;請參閱blog post by TwoCentStudiosproposed fix on github中的討論。