簡體   English   中英

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

}

基本上,當用戶離開當前的View Controller時,我需要使計時器無效並停止更新。

任何幫助表示贊賞

在指定的時間間隔后初始化計時器時,計時器會自動觸發,您可以像這樣聲明它

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 這比自己將其添加到運行循環要簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM