的XCode 9:在AppDelegate中设置RootViewController的启动应用程序
问题描述:
后导致黑屏,我正在更新我的应用程序是与iOS 11.的XCode 9:在AppDelegate中设置RootViewController的启动应用程序
在我的应用程序兼容,我设置RootViewController的在我的AppDelegate didFinishLaunchingWithOptions这样的:
self.window.rootViewController = MainViewController()
self.window.makeKeyAndVisible()
在我MainViewController,我确定哪些VC应该是最初的视图控制器时如果没有令牌存在推出
- - >去LoginViewController
- 如果令牌仍然有效 - >去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,当我尝试运行此。它只启动应用程序并卡住黑屏。
注:
- 该应用程序并没有挂,电话没挂。看来,该应用程序不再加载视图。
- 它去了正确的ViewController的viewDidLoad()
- 我相信这是问题所在,因为当我尝试删除此代码并让应用程序在启动后进入其MainInterface时,没有任何问题。
答
尝试下面的代码以使其可见:
self.window.rootViewController = MainViewController()
self.window.makeKeyAndVisible()
在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()
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()
}
答
编辑:大家好,它似乎只发生在了XCode 9模拟器。今天我再次尝试使用iOS 11版本的不同手机。工作正常。
我通过处理在我的AppDelegate的一切,而不是使用容器视图,将决定是否loginVC将显示或MainTabVC
- 初始化MainTabBarVC和LoginVC在我的AppDelegate解决了这个问题
- 在我的AppDelegate中设置登录和注销通知
- 在我的AppDelegate中rootViewController的句柄交换
- 我的现有令牌的检查器AppDelegate的
,因为我认为这是一个错误,我会用这个现在要么XCode的9或iOS 11,不会让我来处理在一个单独的ViewController,我将它们添加为childViewController就像我怎么才做。
希望它能尽快以最好的方式解决。 拥挤的AppDelegate是一个眼睛。
对不起,我也试过,但它仍然没有解决问题。我将编辑问题以避免混淆 –
您是自己创建窗口还是通过故事板加载? +你能否提供整个'didFinishedLaunching'方法实现给我们更多的上下文? –
我编辑了我的问题以显示我的MainViewController的viewDidLoad。 didFinishedLaunching的相关代码仅仅是您提到的两行代码 –