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

时间:2016-09-16 09:43:03

标签: ios swift nstimer viewcontroller

我正在使用NSTimerfirebase数据库中查找更新。我已将代码放在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?谢谢!

5 个答案:

答案 0 :(得分:5)

只需存储计时器的实例,然后在移动到另一个控制器时使计时器无效,以便首先声明一个NSTimer的实例。

var timer:NSTimer?

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

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

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

self.timer.invalidate()

答案 1 :(得分: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

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

答案 2 :(得分:0)

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

xgb_par[3]
elapsed  
283.691 
just_seq[3]
elapsed 
276.704 
mc_par[3]
elapsed 
89.074 
just_seq[3]/mc_par[3]
elapsed 
3.106451 
just_seq[3]/xgb_par[3]
elapsed 
0.9753711 
xgb_par[3]/mc_par[3]
elapsed 
3.184891

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

要取消NSTimer,只需使用:

timer?.invalidate()

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