3

我正在製作基於分割視圖的iPad應用程序(僅限肖像模式),並且我想知道如何在調用viewDidUnload後恢復初始狀態。如何從viewDidUnload(內存警告之後)恢復,使用UISplitViewController

當分割視圖應用程序啓動首次, -splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 被(-viewDidLoad後右)自動調用。 我在該方法準備UIBarButtonItems。

如果我打開模式對話框或UIWebViewController(它消耗大量內存),應用程序收到內存警告,調用viewDidUnload(s)。

當我關閉模式對話框時,自動調用-viewDidLoad,但是這次不調用 -splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

我準備UIBarButtonItems在 -splitViewController:willHideViewController:withBarButtonItem:forPopoverController: ,但它不叫,所以按鈕被解僱。

在這種情況下,我應該叫人工方法?

我在這裏發現了類似的帖子。 https://github.com/grgcombs/IntelligentSplitViewController/issues/6

感謝。

+0

你應該幾乎總是在viewDidLoad中配置你的UI。你在創建它們後將這些UIBarButtonItems放在哪裏? –

+0

即在splitViewController完成:willHideViewController:withBarButtonItem:forPopoverController:您可以創建一個拆分視圖基礎的項目?你可以在viewDidLoad中找不到實現。我想這是因爲動態地改變按鈕。 – tokentoken

回答

3

我不知道可以回答我自己的問題,但也許我找到了答案。
http://osdir.com/ml/cocoa-dev/2011-02/msg00430.html

它說,我們應該保持在viewDidUnload BarButtonItems,並在viewDidLoad中加載它。

它似乎工作的罰款。

- (void)viewDidUnload { 
    [super viewDidUnload]; 
    self.toolbarItems = self.toolbar.items; // property with retain policy 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    if (self.toolbarItems) { 
     self.toolbar.items = self.toolbarItems; 
     self.toolbarItems = nil; 
    } 
}