返回视图时Swift Timer不会重新启动
Posted
技术标签:
【中文标题】返回视图时Swift Timer不会重新启动【英文标题】:Swift Timer not restart when back to the view 【发布时间】: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 是的,还是不行,伙计
【参考方案1】:
我猜当你离开你的视图控制器时计时器会被重置,因为你在viewDidLoad
中设置了你的计时器,一旦你离开你的ViewController
,所有的东西都会从内存中清除。然后当你再次打开ViewController
时,它会被加载到内存中,一旦你离开ViewController
,一切都会再次被清除。
【讨论】:
以上是关于返回视图时Swift Timer不会重新启动的主要内容,如果未能解决你的问题,请参考以下文章
iCloud 同步后 UITableView 不会重新加载(Swift 2)
如何在 SwiftUI 中实现 MVVM 模式?视图不会重新渲染
带有 fetchedResultsController 的 Tableview 在应用重新启动或视图重新加载之前不会更新新内容