停止 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),否则它会崩溃
我正在使用 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),否则它会崩溃