web-dev-qa-db-fra.com

Définir rootViewController iOS 13

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!

5
Oliver Ferris

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
        }
1
dinesh sharma