当应用程序进入和退出后台时更新ios中的计时器

Posted

技术标签:

【中文标题】当应用程序进入和退出后台时更新ios中的计时器【英文标题】:Updating a timer in ios when app goes in and out of background 【发布时间】:2018-08-11 18:31:33 【问题描述】:

我有一个应用,它在视图控制器中有一个计时器,从 5 分钟倒计时到 0:00。

根据 ios/Apple 应用暂停规则,当应用进入后台时它会停止。

我如何在它进入睡眠之前获取时间并在它回来时在几秒钟内更新它?我知道您不能长时间使用后台处理,因此请避免这样做。

【问题讨论】:

看看***.com/a/50200606/1630618 尝试将值保存在 applicationwillenterbackground 内的用户默认值中。并在可能 didfinishlaunching (appdelegate.swift) 中检索值 【参考方案1】:

似乎是 UserDefaults 的一个很好的用例。 这可以在您的主视图控制器中完成。

ViewController.swift

let defaults = UserDefaults.standard

var timer = Timer()
var timerCount = 300

override func viewDidLoad() 
    super.viewDidLoad()

    let timeLeft = defaults.integer(forKey: "timerLeft1")
    if timeLeft != 0 
        timerCount = timeLeft
    

    startTimer()


func startTimer() 
    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateCounter), userInfo: nil, repeats: true)


@objc func updateCounter() 
    if timerCount > 0 
        timerCount -= 1
        defaults.set(timerCount, forKey: "timerLeft1")
     else 
        timerCount = 300
    

苹果文档:UserDefaults

【讨论】:

不要致电.synchronize()。来自Apple's documentation... “这种方法是不必要的,不应该使用。”

以上是关于当应用程序进入和退出后台时更新ios中的计时器的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在后台或暂停时的位置更新

在后台运行ios应用

Swift:当应用程序进入后台时启动另一个计时器

当应用程序处于后台并且网络连接丢失时,位置更新计时器不起作用?

应用程序在进入后台时停止运行

Swift - 当应用程序进入后台状态时,从 AppDelegate 更新 RootViewController 中的值