我被 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 时,我需要使计时器失效并停止更新。
感谢任何帮助
最佳答案
您需要将 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
的使用。这比自己将其添加到运行循环更简单。
关于ios - 如何使 ViewDidLoad 之外的计时器无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49737572/