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

How to completely close a view controller after returning to home view controller

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

homeViewController -> newGameSelectionViewController -> GameViewController

GameViewController 中,我有一个应该关闭视图控制器的 "home" 按钮和 return 到 newGameSelectionViewController

newGameSelectionViewController

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

然后,我创建了一个从 GameViewControllernewGameSelectionViewController 的展开 segue

在新的GameSelectionViewController中,

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

当我在 GameViewController 中按下主页按钮时,视图关闭并且 return 转到 newGameSelectionViewController

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

我正在 GameViewController 中用 println() 打印倒计时值。这就是我看到之前的倒计时值在 dismissViewController()

之后仍在打印的地方

您的 gameVC 变量将持有对 GameViewController 实例的强引用,因此即使它已被关闭,该对象仍然存在,因为它的引用计数不是 0。

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

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

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