2015-07-28 70 views
0

后完全关闭视图控制器我有一个iOS应用程序包括三个视图控制器如何返回到主视图控制器

homeViewController - > newGameSelectionViewController - > GameViewController

GameViewController,我有一个“家”该按钮应关闭视图控制器并返回到newGameSelectionViewController

newGameSelectionViewController

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

然后,我从GameViewController创建开卷seguenewGameSelectionViewController

在newGameSelectionViewController,

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

当我按下GameViewController home键,查看关闭并返回到newGameSelectionViewController

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

我正在用println()GameViewController中打印倒计数值。多数民众赞成在那里我看到了以前的倒计时值dismissViewController()

+0

如果你想在它即将消失或者在viewDidDisappear中停止它,以确保当你禁用定时器时视图消失,你应该在viewWillDisappear中禁用定时器。 – Omar

回答

1

gameVC变量将举行一个强有力的参考GameViewController实例,因此即使它已经被驳回后,仍然打印时,对象仍然存在它的引用计数不为0 。

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

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

你并不需要在开卷方法明确地关闭该视图控制器,如果你正确地通过赛格瑞调用它 - 退绕过程中会为你做这个。

+0

我将按钮拖到GameViewController的“退出”引脚上,然后创建展开的渐变。在newGameSelectionViewController中,我删除了dismissViewController(),只设置为gameVC为零。然后,按下主页按钮后,GameViewController成功解除,但计数器值仍在打印中。开始一个新的GameView也开始一个新的倒数计时器。在之前的计数器中,仍然打印两个单独的计数器。所以,视图控制器仍然在工作。我在执行放松赛时错过了什么? – dorsalfin

+0

您必须在其他地方参考游戏视图控制器。也许在视图控制器本身内部还有一个保留周期。在游戏视图控制器的prepareForSegue方法中,确保在放松时使计时器失效。 – Paulw11

相关问题