如何使ViewDidLoad外部的计时器无效

时间:2018-04-09 16:31:51

标签: ios swift timer nstimer

我坚持在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时,我需要使计时器无效并停止更新。

感谢任何帮助

2 个答案:

答案 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更简单。