如何使 ViewDidLoad 之外的计时器无效
How to invalidate timer outside ViewDidLoad
我被 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")
}
基本上,当用户离开当前视图控制器时,我需要使计时器无效并停止更新。
感谢任何帮助
当你在指定的时间间隔后初始化它时,定时器会自动触发,你可以这样声明它
var timer:timer?
//
override func viewDidAppear(_ animated: Bool) {
self.timer = Timer(timeInterval: 3,
target: self,
selector: #selector(updateOnlineTrack),
userInfo: nil,
repeats: true)
}
您需要将 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 更简单。
我被 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")
}
基本上,当用户离开当前视图控制器时,我需要使计时器无效并停止更新。
感谢任何帮助
当你在指定的时间间隔后初始化它时,定时器会自动触发,你可以这样声明它
var timer:timer?
//
override func viewDidAppear(_ animated: Bool) {
self.timer = Timer(timeInterval: 3,
target: self,
selector: #selector(updateOnlineTrack),
userInfo: nil,
repeats: true)
}
您需要将 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 更简单。