2017-04-15 13 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としてwerが間違っていた(私はそれを削除しました)、物事はアプリ内にはあなたのnavcontrollerであるkeywindowがあり、サブビュー(たとえそれがなくても)をロードするまで何も表示できません。それはviewdidappearで起こるので、viewdidloadからあなたのコードを置くべきです。

+0

素晴らしい...ありがとう! – user3708224

関連する問題