2015-07-28 71 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

相關問題