我被困在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")
}
基本上,当用户离开当前视图控制器时,我需要使计时器失效并停止更新。
任何帮助不胜感激
您需要将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
的用法。这比自己将其添加到运行循环中更简单。
定时器在指定间隔后初始化时自动触发,可以这样声明
var timer:timer?
//
override func viewDidAppear(_ animated: Bool) {
self.timer = Timer(timeInterval: 3,
target: self,
selector: #selector(updateOnlineTrack),
userInfo: nil,
repeats: true)
}