ios - 如何使 ViewDidLoad 之外的计时器无效

标签 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 时,我需要使计时器失效并停止更新。

感谢任何帮助

最佳答案

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

相关文章:

swift - cocoa Xcode : Open Window Controller from AppDelegate Programmatically using Swift 4 for Mac?

java - 如何修复NullPointerException,jsoup元素

ios - FMDB 由于 sqlite3_step 和 while (重试)而无限循环

ios - 无法重新加载 TableView

swift - 快速从不同文件加载变量

timer - 为什么 HAL_TIM_PeriodElapsedCallback 在 HAL_TIM_Base_Start_IT 调用后立即被调用?

javascript - "Currently On Air"代表广播网站

ios - 从 3D Touch 快捷菜单加载 View

ios - Swift 错误 - 使用未解析的标识符 'kGMSMarkerAnimationPop'

ios - 从 UIScreen 获取快照