停止NSTimer并解雇视图控制器(swift)

问题描述:

我正在使用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?谢谢!

只储存你的计时器的实例,然后当你移动到另一个控制器无效计时器,所以首先申报一个NSTimer的实例。

var timer:NSTimer? 

现在使用此对象来存储scheduledTimer的引用。

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

现在转移到另一个控制器。

self.timer.invalidate() 

//嗨,定时器事件完成后,你需要的是无效计时器像如下

yourTimer.invalidate() 

var timer:NSTimer? 

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

    //ToStop Timer 

    timer.invalidate() 
    timer = nil 

这是一件好事,零已经失效之后的实例变量计时器,它避免了进一步的混乱,如果你需要创建具有相同的变量另一个计时器。

当NSTimer没有失效时,视图控制器的实例留在内存中,并没有在ARC中释放。所以当旧视图控制器消失时,你需要使NSTimer无效。

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

要取消的NSTimer,只需使用:

timer?.invalidate() 

并请确保您的功能DriversInterfaceViewController.CheckFormularChild运行在UIThread(如果这个方法倒是UI),否则它会崩溃