返回主视图控制器后如何完全关闭视图控制器

时间:2015-07-28 10:34:52

标签: ios swift viewcontroller

我有一个iOS应用程序,包含三个视图控制器

homeViewController - > newGameSelectionViewController - > GameViewController

GameViewController中,我有一个“主页”按钮,应关闭视图控制器并返回newGameSelectionViewController

newGameSelectionViewController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    gameVC = segue.destinationViewController as! GameViewController
    gameVC.countdown = 60
}

然后,我从segue创建了newGameSelectionViewControllerGameViewController的展开。

在newGameSelectionViewController中,

@IBAction func unwindFromHomeButton(segue: UIStoryboardSegue) {
    gameVC.dismissViewControllerAnimated(true, completion: nil)
}

当我按下GameViewController中的主页按钮时,视图会关闭并返回newGameSelectionViewController

问题是,在按下主页按钮并返回newGameSelectionViewController后,GameView控制器中的倒数计时器仍然继续。如果我打开另一个GameViewController,它还会打开一个全新的视图控制器。换句话说,通过调用GameViewController,第一个dismissViewController()没有关闭。如何完全关闭ViewController,以便在开始新游戏时,以前的视图控制器不会在后台继续计数。

我正在println()中使用GameViewController打印倒计时值。那是我在dismissViewController()

之后仍然打印的地方,我看到之前的倒计时值

1 个答案:

答案 0 :(得分:1)

您的gameVC变量将保留对GameViewController实例的强引用,因此即使它已被解除,该对象仍然存在,因为其引用计数不为0.

您需要在展开方法中将gameVC设置为nil才能删除此引用。

@IBAction func unwindFromHomeButton(segue: UIStoryboardSegue) {
    gameVC=nil;
}

如果您通过segue正确调用它,则无需在unwind方法中显式关闭视图控制器 - 展开过程将为您执行此操作。