如何在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")
}

基本上,当用户离开当前视图控制器时,我需要使计时器失效并停止更新。

任何帮助不胜感激

您需要将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)
}

最新更新