2013-02-27 41 views
0

我一直在苦苦掙扎,所以最後我放棄了試圖找到答案並決定立即提問。如何在Xcode上管理登錄和註銷過程

在我的應用程序中,我有一個用戶登錄頁面。該應用程序有一個TabBarViewController,其中有一些NavigationControllers的項目。

我最後的努力是將登錄屏幕嵌入NavigationBarController並使其成爲初始視圖控制器,如下圖所示。

enter image description here

當應用程序啓動時,如果用戶登錄的LogInViewController「塞格斯」的TabBarController,一切都很好。當用戶在ProfileViewController中註銷時,這個ViewController中的一個segue會被初始化爲視圖控制器。

另一方面,如果沒有用戶登錄,LogInViewController將顯示一個視圖,以便用戶可以插入用戶名和密碼。如果憑證是正確的,則LogInViewController'繼續'到TabBarController。問題是,在這一點上,即使該應用程序仍然工作良好,我得到以下警告:

警告:試圖提出TabBarViewController:0xa19a670上的UINavigationController:0xa526370而演示正在進行!

所以我認爲這不是處理所有這個LogIn/LogOut過程的最好方法。

我的問題是,我應該在哪裏把LogInScreen放在層次結構中? 如果有任何機會,我的佈局/層次是正確的,如何使警告消失?

+0

我已經使用了這個系統幾次,它運行良好。我的'rootViewController'是'UINavigationController'(酒吧隱藏)。我的初始視圖控制器的圖像與我的加載圖像相同(用戶看不到變化)。當它加載時,它會檢查用戶是否登錄,然後用交叉淡入淡出動畫對登錄屏幕或登錄屏幕執行'segue'(push)。 「註銷」功能彈出到導航控制器的根目錄,淡入登錄頁面(登錄頁面看起來像加載圖像,但登錄內容被覆蓋)。你的問題聽起來像是實施問題。 – DBD 2013-02-27 16:15:37

回答

1

你應該讓你的主屏幕爲您rootViewController,並在一旦你的應用程序啓動或變得活躍,你可以檢查用戶登錄或沒有,如果沒有則呈現LoginScreen模態,它會避免與其他NavigationController的爛​​攤子或TabBarController

或者可以將所有ViewControllers置於MutbaleArray並根據要顯示的視圖設置當前索引TabBarController?如果您不想在用戶登錄後顯示登錄屏幕,只需從MutableArray中刪除它,查看我的回答here,它可能會幫助您的原因

+0

通過主屏幕你的意思是TabBarViewController的權利? 問題是,如果我在AppDelegate中提供LogInScreen,當用戶註銷時如何返回到它? – Joaocdn 2013-02-27 15:02:25

+0

是的,無論你在用戶登錄後顯示的是什麼,我的意思是 – nsgulliver 2013-02-27 15:04:04

+0

你可以使用ApplicationDidBecomeActiveNotification,你不必去AppDelegate那麼只需註冊你的控制器到這個通知並完成你的任務 – nsgulliver 2013-02-27 15:05:13