Xcodeをアップグレードした後、アプリケーションの重要な部分が機能しなくなりました。
アプリが起動したら、関数を実行してブールフラグをチェックし、正しいrootViewControllerを設定します。
しかし、これを設定するために使用していたコードは動作しなくなりました
class func setLoginAsInitialViewContoller(window:UIWindow) {
print("SET LOGIN")
let storyboard = UIStoryboard(name: "Login", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "LoginViewController")
controller.modalPresentationStyle = .overFullScreen
window.rootViewController = controller
window.makeKeyAndVisible()
}
具体的には、アプリが2番目の最後の行window.rootViewController = controller
を取得すると、libc++abi.dylib: terminating with uncaught exception of type NSException
エラーでクラッシュします。
上記の関数はUtilities.Swift
というクラスにあり、以下のようにAppDelegate.Swift
内から関数を呼び出しています。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var storyboard: UIStoryboard? = nil
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.isIdleTimerDisabled = true
Utilities.decideInitialViewController(window: self.window!)
return true
}
ルートコントローラーの設定方法に関する解決策や修正は大歓迎です。
感謝!
viewDidAppearでは、ルートを設定できます:-
override func viewDidAppear(_ animated: Bool) {
print(self.view.window)
let vc = self.storyboard?.instantiateViewController(identifier: "SecondViewController") as? SecondViewController
self.view.window?.rootViewController = vc
}