2017-05-16 1 views
0

Ich setze rootViewController wie folgt in meiner App.Ändern von RootViewController verursacht seltsames Verhalten

func setupMainView() { 
    let rootViewContorller = window?.rootViewController 

    if (rootViewContorller?.presentedViewController != nil || rootViewContorller?.presentingViewController != nil) { 
     rootViewContorller?.dismiss(animated: false, completion: nil) 
    } 

    let tabbarController = UITabBarController() 
    tabbarController.delegate = self 

    let homeViewController = HomeViewController() 
    let rewardsViewController = RewardsViewController() 

    let homeNVc = UINavigationController() 
    let rewardsNVc = UINavigationController() 

    homeNVc.viewControllers = [homeViewController] 
    rewardsNVc.viewControllers = [rewardsViewController] 

    tabbarController.viewControllers = [] 

    tabbarController.viewControllers = [homeNVc, rewardsNVc] 
    tabbarController.selectedIndex = 0 

    self.window?.rootViewController = tabbarController 
} 

Es funktioniert gut. Aber ich muss rootViewController in der App wie nach der Registrierung usw. ändern. Danach gehe ich zu Debug View Hierarchy. Ich sehe immer noch den registrationViewController dort. Und sagen wir mal wenn ich rootViewController 3-4 mal ändere sind alle vorherigen Controller noch da. Also meine Frage ist Wie kann ich alle ViewControllers aus dem Speicher entfernen, bevor Sie den RootViewController ändern.

+0

Was passiert, wenn Sie 'rootViewController' auf' nil' setzen und dann in der nächsten Zeile auf den gewünschten Wert setzen? – LinusGeffarth

+0

habe es schon versucht aber es tut nichts was ich will. @LinusGeffarth –

+0

Kannst du bitte den Code einfügen, wie du einen anderen View-Controller im Fenster hinzufügst? –

Antwort

1

Sie können diese Funktion aufrufen, um alle Viewcontroller zu löschen.

self.window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil) 
+0

auskommentieren Dies wird bereits in Frage gestellt –