0

我有两个测试控制器:TestController1TestController2. 当第二个控制器加载或出现时,我试图通过更改UIApplication.shared.window[0].rootViewController为 self ( TestController2) 来取消第一个控制器。但是什么都没有发生,我的内存中也有两个控制器。所以,我的问题是:我怎样才能deinit所有的 ViewControllers 只保留一个?

我所有的测试控制器都有 deinit 方法,我试图在它执行时打印“deinited”,所以我没有像这里提出的许多问题那样的断点问题。

这是我TestController2的代码:

class TestController2: UIViewController {

    deinit {
        print("testController 2 deinited")
    }


    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        //first attempt
        let del = UIApplication.shared.delegate as! AppDelegate
        del.window?.rootViewController = self

        //second attempt
        UIApplication.shared.windows[0].rootViewController = self

        //third attempt
        UIApplication.shared.keyWindow?.rootViewController = self
    }
}

我所有的尝试都不起作用..

更新:第一个和第二个控制器只有一个按钮。没有任何业务逻辑。我在 Storyboard 上通过 ctrl+drag 模式从控制器 1 的按钮到控制器 2 创建了一个 segue。

4

0 回答 0