2017-05-16 4 views
0

私のアプリでは、このようにrootViewControllerを設定しています。rootViewControllerを変更すると奇妙な動作が発生する

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 
} 

正常です。しかし、その後私はDebug View Hierarchyに行くときに登録後などのようにアプリでrootViewControllerを変更する必要があります。私はまだそこにregistrationViewControllerが表示されます。そして、私がrootViewControllerを3〜4回変更すると、以前のすべてのコントローラがまだそこにあるとします。だから私の質問はどのようにrootViewControllerを変更する前にメモリからすべてのviewControllerを削除することができますです。

+0

'rootViewController'を' nil'に設定し、それを次の行に好きなものに設定するとどうなりますか? – LinusGeffarth

+0

はすでにそれを試しましたが、私はそれが何もしません。 @LinusGeffarth –

+0

ウィンドウに他のView Controllerを追加する方法をコードに記述してください。 –

答えて

1

この関数を呼び出すと、すべてのビューコントローラーをクリアできます。

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

これは既に問題に言及されています –

関連する問題