【问题标题】:Swift Timer not restart when back to the view返回视图时Swift Timer不会重新启动
【发布时间】:2021-08-23 04:44:33
【问题描述】:

我想检查我的计时器是否仍在运行,因为当我离开视图并返回时,我希望计时器仍在运行而不是重置。我试试这个还是失败了

if otpViewModel.timer == nil {
        otpViewModel.timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(onTimerFires), userInfo: nil, repeats: true)
    }else if otpViewModel.timer != nil {
        otpViewModel.timer?.invalidate()
        otpViewModel.timer = nil
        countDownLabel.isHidden = true
        resendButton.isHidden = false
    }

 @objc func onTimerFires()
{
    otpViewModel.timeLeft -= 1
    //resendBtn.isHidden = true
    if otpViewModel.timeLeft <= 0 {
        if otpViewModel.minutes == 1 {
            otpViewModel.minutes = 0
            otpViewModel.timeLeft = 60
        }
        else {
            otpViewModel.timer?.invalidate()
            otpViewModel.timer = nil
            countDownLabel.isHidden = true
            resendButton.isHidden = false
        }
    }
    if otpViewModel.minutes == 1 {
        switch otpViewModel.otpMethod {
        case .SMS:
            countDownLabel.text = "SMS dikirim ulang dalam \(otpViewModel.minutes) : \(otpViewModel.timeLeft) detik"
        case .WHATSAPP:
            countDownLabel.text = "WhatsApp dikirim ulang dalam \(otpViewModel.minutes) : \(otpViewModel.timeLeft) detik"
        default:
            print("none")
        }
    } else {
        switch otpViewModel.otpMethod {
        case .SMS:
            countDownLabel.text = "SMS dikirim ulang dalam \(otpViewModel.minutes) : \(otpViewModel.timeLeft) detik"
        case .WHATSAPP:
            countDownLabel.text = "WhatsApp dikirim ulang dalam \(otpViewModel.minutes) : \(otpViewModel.timeLeft) detik"
        default:
            print("none")
        }
    }
}

我尝试了这个,但仍然无法正常工作,每当我离开视图并返回视图时,我的计时器都会重置

【问题讨论】:

  • }else if otpViewModel.timer != nil { 只做} else {
  • 当前视图控制器离开时使用Date保存当前日期和时间。
  • @aheze 我不明白我的 else if 上的“just do”是什么意思?
  • @afipermana 将 }else if otpViewModel.timer != nil { 替换为 } else {。它们都是一样的,因为在你做if otpViewModel.timer == nil { ...之前。但这只是一般性建议 - 您的问题可能出在其他地方。
  • @aheze 是的,还是不行,伙计

标签: ios swift iphone xcode timer


【解决方案1】:

我猜当你离开你的视图控制器时计时器会被重置,因为你在viewDidLoad 中设置了你的计时器,一旦你离开你的ViewController,所有的东西都会从内存中清除。然后当你再次打开ViewController时,它会被加载到内存中,一旦你离开ViewController,一切都会再次被清除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2016-03-26
    • 2012-08-30
    • 1970-01-01
    • 2018-08-02
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多