2016-02-05 22 views
0

我想改變視圖控制器後用戶登錄到我的應用程序從登錄故事板到我的主故事板,這項工作成功,但我收到以下警告控制檯:從登錄故事板移動到主要故事板在斯威夫特沒有警告

2016-02-05 01:57:59.553 Commu[4749:160489] Warning: Attempt to present <UITabBarController: 0x7f93285b9d90> on <Commu.LoginViewController:  0x7f9328494e80> whose view is not in the window hierarchy! 

在我登錄視圖控制器的代碼如下:

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("MainMenu") 
    self.presentViewController(vc, animated: true, completion: nil)       
}) 

是否有故事板之間移動,以避免此警告消息,更好的辦法?

+0

你如何設置你的登錄故事板?那也是模式嗎? – bolnad

+0

登錄頁面是loginSystem故事板的初始視圖控制器,在此頁面上,您可以使用用戶名和密碼登錄。如果信息不正確,則將用戶信息與firebase進行覈對並提供錯誤信息,如果信息正確,則將其發送到主菜單 –

回答

0

用戶登錄後,不再需要登錄層次結構。

成功登錄後,您需要更改您的mainWindow的根視圖控制器,即appDelegate的窗口的rootViewContoller。

同樣在用戶註銷時再次更改窗口的rootViewContoller。

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let vc = storyboard.instantiateViewControllerWithIdentifier("MainMenu") 


let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
appDelegate.window?.rootViewController = vc 

您還可以在層次結構中包含UINavigationController來推送和彈出其他viewControllers。

+0

謝謝,但我仍然收到同樣的錯誤:2016-02-05 13:30:20.183 Commu [2277:865191]警告:嘗試在上呈現,其視圖不在窗口層次結構中! –

0

該警告是因爲:

self.presentViewController(vc, animated: true, completion: nil)被呈現的viewController爲模式圖。這應該只用於在短時間內顯示屏幕,以便爲用戶提供一些操作。預期用戶將在某一時刻從模態窗口移回。

有一項新功能,稱爲storyboard reference。這可以讓你在故事板之間使用一段時間。

那麼你可以使用:

self.performSegueWithIdentifier("segueId", sender: self) 

這是做一個更清潔的方式,並保持故事板裏所有的導航控制。

+0

謝謝,我怎麼能以編程方式創建segue,因爲我仍然想在將用戶發送到新的故事板之前進行用戶身份驗證檢查?是他們的解決方案,適用於低於9的ios版本 –