我正在使用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
?谢谢!
答案 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),否则它将崩溃