我坚持在ViewDidLoad之外使计时器失效。尝试全局声明计时器,但遇到了SIGABRT错误。我错过了什么?
override func viewDidAppear(_ animated: Bool) {
let timer = Timer(timeInterval: 3,
target: self,
selector: #selector(updateOnlineTrack),
userInfo: nil,
repeats: true)
RunLoop.current.add(timer, forMode: .defaultRunLoopMode)
timer.fire()
}
updateOnlineTrack标有@objc且项目正在编译,但我无法弄清楚这个SIGABRT
@objc private func updateOnlineTrack() {
print("Tick")
}
基本上,当用户离开当前的View Controller时,我需要使计时器无效并停止更新。
感谢任何帮助
答案 0 :(得分:1)
在指定的时间间隔后启动计时器时会自动触发计时器,您可以像这样声明它
var timer:timer?
//
override func viewDidAppear(_ animated: Bool) {
self.timer = Timer(timeInterval: 3,
target: self,
selector: #selector(updateOnlineTrack),
userInfo: nil,
repeats: true)
}
答案 1 :(得分:1)
您需要将timer
声明为实例属性而不是局部变量。
class MyViewController: UIViewController {
var timer: Timer?
override func viewDidAppear(_ animated: Bool) {
timer = Timer.scheduledTimer(timeInterval: 3,
target: self,
selector: #selector(updateOnlineTrack),
userInfo: nil,
repeats: true)
timer?.fire()
}
}
请注意,它是可选的。
请注意scheduledTimer
的使用。这比将自己添加到runloop更简单。