2017-04-15 19 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