我有一个iOS应用程序,包含三个视图控制器
homeViewController - > newGameSelectionViewController - > GameViewController
在GameViewController
中,我有一个“主页”按钮,应关闭视图控制器并返回newGameSelectionViewController
。
在newGameSelectionViewController
,
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
gameVC = segue.destinationViewController as! GameViewController
gameVC.countdown = 60
}
然后,我从segue
创建了newGameSelectionViewController
到GameViewController
的展开。
在newGameSelectionViewController中,
@IBAction func unwindFromHomeButton(segue: UIStoryboardSegue) {
gameVC.dismissViewControllerAnimated(true, completion: nil)
}
当我按下GameViewController
中的主页按钮时,视图会关闭并返回newGameSelectionViewController
问题是,在按下主页按钮并返回newGameSelectionViewController
后,GameView
控制器中的倒数计时器仍然继续。如果我打开另一个GameViewController
,它还会打开一个全新的视图控制器。换句话说,通过调用GameViewController
,第一个dismissViewController()
没有关闭。如何完全关闭ViewController
,以便在开始新游戏时,以前的视图控制器不会在后台继续计数。
我正在println()
中使用GameViewController
打印倒计时值。那是我在dismissViewController()
答案 0 :(得分:1)
您的gameVC
变量将保留对GameViewController
实例的强引用,因此即使它已被解除,该对象仍然存在,因为其引用计数不为0.
您需要在展开方法中将gameVC
设置为nil才能删除此引用。
@IBAction func unwindFromHomeButton(segue: UIStoryboardSegue) {
gameVC=nil;
}
如果您通过segue正确调用它,则无需在unwind方法中显式关闭视图控制器 - 展开过程将为您执行此操作。