2017-04-15 60 views
0

我有一個小問題,用一個空白屏幕登錄到一個應用程序在第一時間和我得到警告「試圖提出有關誰的觀點是不是在窗口層次!」關閉並重新啓動後,視圖顯示正常。我相信它與rootViewController有關,但不知道......先感謝您的幫助或方向!黑屏首次推出的應用程序的Xcode

應用程序委託

@UIApplicationMain 
    class AppDelegate: UIResponder, UIApplicationDelegate { 

     var window: UIWindow? 
     var ref:FIRDatabaseReference? 
     var databaseHandle:FIRDatabaseHandle? 

     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

      window = UIWindow(frame: UIScreen.main.bounds) 
      window?.makeKeyAndVisible() 
      window?.rootViewController = MainNavigationController() 

      FIRApp.configure() 
      ref = FIRDatabase.database().reference() 

      return true 
     } 

導航控制器rootViewController

class MainNavigationController: UINavigationController { 

     var segmentedController: UISegmentedControl! 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      let vc1 = TravelersFeedVC() 
      let vc2 = ProfileVC() 

      if isLoggedIn() { 
       // assume user is logged in 
       let homeController = HomeController() 
       viewControllers = [homeController] 
       homeController.firstViewController = vc1 
       homeController.secondViewController = vc2 


      } else { 
       perform(#selector(showLoginController), with: nil, afterDelay: 0.01) 
      } 
     } 

     fileprivate func isLoggedIn() -> Bool { 
      return UserDefaults.standard.isLoggedIn() 
     } 

     func showLoginController() { 
      let loginController = LoginController() 
      present(loginController, animated: true, completion: { 
       // perhaps do something here later 
      }) 
     } 
    } 

//登錄名爲

func finishLoggingIn() { 
     let rootViewController = UIApplication.shared.keyWindow?.rootViewController 
     guard let mainNavigationController = rootViewController as? MainNavigationController else { return } 

     let vc1 = TravelersFeedVC() 
     let vc2 = ProfileVC() 

     if isLoggedIn() { 
      // assume user is logged in 
      let homeController = HomeController() 
      mainNavigationController.viewControllers = [HomeController()] 
      homeController.firstViewController = vc1 
      homeController.secondViewController = vc2 

     } else { 
      perform(#selector(showLoginController), with: nil, afterDelay: 0.01) 
     } 
     UserDefaults.standard.setIsLoggedIn(value: true) 
     dismiss(animated: true, completion: nil) 
    } 
+0

調用presentViewController以模態方式在現有導航堆棧之外呈現視圖控制器;它不包含在你的UINavigationController或任何其他。因此,請在第一次或每次輸入應用時在您的導航中推送視圖。 –

回答

0

OK功能,所以我最後ANS這是錯誤的(我刪除了),事情是在應用程序中有一個keywindow,這是你的navcontroller,並且你不能在這個東西上展示任何東西,直到它將加載它的子視圖(即使它沒有),並且那會在viewdidappear中發生,所以你應該把你的代碼從viewdidload放在那裏。

+0

太棒了...謝謝! – user3708224