停止 NSTimer 并关闭视图控制器 (swift)

Stop NSTimer and dismiss view controller (swift)

我正在使用 NSTimer 在我的 firebase 数据库中查找更新。我已将代码放入 viewDidLoad().

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 或如何停止 NSTimer programmatically?谢谢!

// 嗨,定时器事件完成后,您需要使该定时器无效,如下所示

yourTimer.invalidate()

只需存储您的计时器实例,然后当您移动到另一个控制器时使计时器无效,因此首先声明一个 NSTimer.

实例
var timer:NSTimer?

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

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

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

self.timer.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

在使实例变量 timer 无效后将其置为 nil 是一件好事,如果您需要使用相同的变量创建另一个计时器,它可以避免进一步的混淆。

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

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

要取消 NSTimer,只需使用:

timer?.invalidate()

请确保您的函数 DriversInterfaceViewController.CheckFormularChild 在 UI 线程中运行(如果此方法涉及 UI),否则它会崩溃