2017-10-10 80 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是一个眼睛。

相关问题