2016-09-16 43 views
1

我正在使用NSTimer在我的firebase數據庫中查找更新。我已將代碼放入我的viewDidLoad()停止NSTimer並解僱視圖控制器(swift)

NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true) 

當用戶收到了文件中的數據庫中,我希望用戶轉到另一個ViewController。問題是舊的ViewController正在後臺運行,或者在更改View Controller時定時器不停止。

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)    
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("recievedMission") as! RecievedMissionViewController 
self.navigationController!.pushViewController(nextViewController, animated: true) 

如何解僱老View Controller或如何停止的NSTimerprogrammatically?謝謝!

回答

4

只儲存你的計時器的實例,然後當你移動到另一個控制器無效計時器,所以首先申報一個NSTimer的實例。

var timer:NSTimer? 

現在使用此對象來存儲scheduledTimer的引用。

self.timer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true) 

現在轉移到另一個控制器。

self.timer.invalidate() 
0

//嗨,定時器事件完成後,你需要的是無效計時器像如下

yourTimer.invalidate() 
1
var timer:NSTimer? 

    timer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: 
    #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true) 

    //ToStop Timer 

    timer.invalidate() 
    timer = nil 

這是一件好事,零已經失效之後的實例變量計時器,它避免了進一步的混亂,如果你需要創建具有相同的變量另一個計時器。

0

當NSTimer沒有失效時,視圖控制器的實例留在內存中,並沒有在ARC中釋放。所以當舊視圖控制器消失時,你需要使NSTimer無效。

override func viewWillDisappear(animated: Bool) 
{ 
    if self.timer != nil 
    { 
     self.timer!.invalidate() 
     self.timer = nil 
    } 
} 
0

要取消的NSTimer,只需使用:

timer?.invalidate() 

並請確保您的功能DriversInterfaceViewController.CheckFormularChild運行在UIThread(如果這個方法倒是UI),否則它會崩潰

相關問題