2017-10-10 63 views
0

後導致黑屏,我正在更新我的應用程序是與iOS 11.的XCode 9:在AppDelegate中設置RootViewController的啓動應用程序

在我的應用程序兼容,我設置RootViewController的在我的AppDelegate didFinishLaunchingWithOptions這樣的:

self.window.rootViewController = MainViewController() 
self.window.makeKeyAndVisible() 

在我MainViewController,我確定哪些VC應該是最初的視圖控制器時如果沒有令牌存在推出

  1. - >去LoginViewController
  2. 如果令牌仍然有效 - >去HomeViewController

這裏是我的MainViewController的viewDidLoad中():

override func viewDidLoad() { 
    super.viewDidLoad() 
    // main tab bar controller 
    self.initTabBarMainController() 

    // login page 
    self.initLoginViewController() 

    // checking the session 
    let tokenExpired = SessionManager.sharedInstance.isTokenExpired() 
    if Utilities.isLoggedIn() && SessionManager.sharedInstance.getSessionToken() != nil && !tokenExpired 
    { 
     self.addChildViewController(self.mainTabViewController!) 
     self.view.addSubview((self.mainTabViewController?.view)!) 
    } else { 
     self.addChildViewController(self.loginViewController!) 
     self.view.addSubview((self.loginViewController?.view)!) 
    } 

    self.setupNotifications() 

    } 

然而,在iOS的11,當我嘗試運行此。它只啓動應用程序並卡住黑屏。

注:

  1. 該應用程序並沒有掛,電話沒掛。看來,該應用程序不再加載視圖。
  2. 它去了正確的ViewController的viewDidLoad()
  3. 我相信這是問題所在,因爲當我嘗試刪除此代碼並讓應用程序在啓動後進入其MainInterface時,沒有任何問題。

回答

1

嘗試下面的代碼以使其可見:

self.window.rootViewController = MainViewController() 
self.window.makeKeyAndVisible() 

MainViewControllerviewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 
    // main tab bar controller 
    self.initTabBarMainController() 

    // login page 
    self.initLoginViewController() 

    // checking the session 
    let tokenExpired = SessionManager.sharedInstance.isTokenExpired() 
    var presentedViewController: UIViewController? = nil 
    if Utilities.isLoggedIn() && SessionManager.sharedInstance.getSessionToken() != nil && !tokenExpired 
    { 
     presentedViewController = self.mainTabViewController! 
    } else { 
     presentedViewController = self.loginViewController! 
    } 

    self.addChildViewController(presentedViewController!) 
    presentedViewController!.view.frame = self.view.frame 
    self.view.addSubview(presentedViewController!.view) 

    self.setupNotifications() 

} 
+0

對不起,我也試過,但它仍然沒有解決問題。我將編輯問題以避免混淆 –

+0

您是自己創建窗口還是通過故事板加載? +你能否提供整個'didFinishedLaunching'方法實現給我們更多的上下文? –

+0

我編輯了我的問題以顯示我的MainViewController的viewDidLoad。 didFinishedLaunching的相關代碼僅僅是您提到的兩行代碼 –

0

編輯:大家好,它似乎只發生在了XCode 9模擬器。今天我再次嘗試使用iOS 11版本的不同手機。工作正常。


我通過處理在我的AppDelegate的一切,而不是使用容器視圖,將決定是否loginVC將顯示或MainTabVC

  1. 初始化MainTabBarVC和LoginVC在我的AppDelegate解決了這個問題
  2. 在我的AppDelegate中設置登錄和註銷通知
  3. 在我的AppDelegate中rootViewController的句柄交換
  4. 我的現有令牌的檢查器AppDelegate的

,因爲我認爲這是一個錯誤,我會用這個現在要麼XCode的9或iOS 11,不會讓我來處理在一個單獨的ViewController,我將它們添加爲childViewController就像我怎麼才做。

希望它能儘快以最好的方式解決。 擁擠的AppDelegate是一個眼睛。

相關問題