2013-05-02 98 views
9

我的iOS應用程序以登錄提示打開。一旦用戶登錄,它將切換到主視圖。成功登錄後重新分配RootViewController

在應用中:didFinishLaunchingWithOptions,我的RootViewController的設置爲LoginViewController。該LoginViewController有AppDelegate中作爲其代表:

LoginViewController *login = [[LoginViewController alloc] init]; 
[login setDelegate:self]; 
[[self window] setRootViewController:login]; 

如果登錄成功,LoginViewController調用AppDelegate中的userDidLogin方法:

if([[self delegate] respondsToSelector:@selector(userDidLogin)]) { 
    [[self delegate] userDidLogin]; 
} 

userDidLogin創建一個新的UINavigationController並將其分配爲RootViewController的:

- (void)userDidLogin 
{ 
    MainRecordViewController *mainRecordViewController = [[MainRecordViewController alloc] init]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mainRecordViewController]; 
    [[self window] setRootViewController:navController]; 
} 

通過向LoginViewController的dealloc方法添加一個NSLog,看起來LoginViewControl ler在該階段銷燬並且執行按預期繼續進行。

我沒有做任何事情明確關閉LoginViewController,只是依靠假設分配一個新的RootViewController將意味着舊的消失,並由ARC整理。

我可以依靠總是既然如此?這是一個明智的做法嗎?

在此先感謝。

詹姆斯

+1

邊注:如果您不確定什麼,什麼不得到由ARC發佈可以實現dealloc方法和打印類似的NSLog(@「MySuperDuperClass的實例是通過ARC釋放」)。 – Groot 2013-05-02 09:05:59

+0

謝謝 - 我已經完成了。這就是我所說的「通過將NSLog添加到dealloc方法...」。視圖似乎正確關閉,看起來它總是被釋放 - 但我想知道我是否可以依靠它始終工作。我懷疑這很好,但感覺就像是一個可能出錯的假設...... – James 2013-05-02 09:08:26

回答

11

documentationrootViewController財產狀態:

如果窗口有一個現有的視圖層次,老觀點 安裝了新的之前刪除。

所以,如果你沒有自己的基準存到LoginViewController,它就會被破壞。

也許這個:RootViewController Switch Transition Animation對你也很有趣,因爲它描述瞭如何用動畫切換根視圖控制器 。

+1

我喜歡這個 - 一個答案,再加上審美的細化。非常感激。 – James 2013-05-02 09:14:20