0

我面臨以下問題:我的應用程序有兩個主控制器(a)loginController和(b)contentController,當應用程序啓動時我檢查用戶是否登錄if是的,我顯示contentController,否則我顯示登錄控制器。所以基本上在didFinishLaunchingWithOptions中,我將其中一個控制器分配給了window.rootViewController。問題是,當我想切換從一個控制器到另一個(因爲用戶做出的登錄或註銷)來完成這一點,我使用以下代碼:ios:更改window.rootViewController和內存管理

[UIView transitionWithView:self.window 
        duration:0.65 
        options:UIViewAnimationOptionTransitionFlipFromLeft 
       animations:^{ 
        self.window.rootViewController = self.contentController; 
       } 
       completion:^(BOOL finished){ 
        [self.loginController release]; 
       }]; 

此轉變之前window.rootViewController物的LoginController,所述這裏的問題是,當執行該代碼我收到以下錯誤:

-[loginController _preferredInterfaceOrientationGivenCurrentOrientation:]: message sent to deallocated instance 0x1c55b490 

我想知道我怎麼可以釋放我的控制器沒有得到這個錯誤。 如果有人可以建議我什麼是在運行時更改window.rootViewController的最佳方法,那也會很棒。

+0

難道這是因爲viewWillDisappear:和viewDidDissappear:沒有像[這個答案](http://stackoverflow.com/a/5279474/120497)解釋的被調用? – djskinner

回答

1

沒有看到更多的代碼,不可能確定爲什麼你有內存管理問題。但我想提供一個不同的答案。隨時讓您的內容控制器成爲窗口的根控制器。如果您需要顯示登錄屏幕,請將其作爲內容控制器上的模式視圖控制器呈現。這將比切換根視圖控制器容易得多。您可以在啓動時不顯示動畫,以便用戶永遠不會看到它的轉換。登錄後,您可以解除任何數量的方式來顯示其下的內容控制器。如果用戶註銷,則可以再次呈現登錄控制器,作爲內容控制器上的模式控制器。

+0

我很感謝你的回答,但你提出的解決方案不適合我的應用程序體系結構。爲了呈現模態控制器,我必須等待viewDidAppear –

+0

不可以,您可以從另一個視圖控制器的viewDidLoad方法呈現模態視圖控制器。用戶永遠不會看到第一個控制器。 – rmaddy

+0

是的你是對的,無論如何這種方法不能解決我的內存管理問題,在時間只有一個視圖控制器層次結構 –