Après la mise à niveau de Xcode, une partie critique de mon application a cessé de fonctionner.
Lorsque mon application se lance, j'exécute une fonction pour vérifier les indicateurs booléens et définir le bon rootViewController.
Mais le code que j'ai utilisé pour définir cela a maintenant cessé de fonctionner
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()
}
Plus précisément, lorsque l'application obtient l'avant-dernière ligne window.rootViewController = controller
il se bloque avec un libc++abi.dylib: terminating with uncaught exception of type NSException
Erreur.
La fonction ci-dessus est dans une classe appelée Utilities.Swift
et j'appelle la fonction depuis mon AppDelegate.Swift
comme indiqué ci-dessous:
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
}
Toutes les solutions ou correctifs sur la façon dont je peux configurer le contrôleur racine sont très appréciés.
Remercier!
Dans viewDidAppear vous pouvez définir root: -
override func viewDidAppear(_ animated: Bool) {
print(self.view.window)
let vc = self.storyboard?.instantiateViewController(identifier: "SecondViewController") as? SecondViewController
self.view.window?.rootViewController = vc
}