我有两个测试控制器:TestController1
和TestController2
. 当第二个控制器加载或出现时,我试图通过更改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。