停止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
或如何停止的NSTimer
programmatically
?谢谢!
答
只储存你的计时器的实例,然后当你移动到另一个控制器无效计时器,所以首先申报一个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),否则它会崩溃