【发布时间】:2015-08-07 23:00:17
【问题描述】:
我正在制作一个应用程序,该应用程序依赖于每分钟触发一次的计时器,将标签从“还剩 x 分钟”更改为“还剩 (x-1) 分钟。基本上,它每分钟都会减少数字。我需要计时器即使在我关闭应用程序时也能正常工作(不是完全关闭,只需按下主屏幕并让它在后台运行),这样当用户在后台离开应用程序 5 分钟后返回应用程序时,标签会显示“还剩 (x-5) 分钟”。
现在,当我在模拟器中运行它时,它可以完美运行,但是当我在手机上运行它时,它就无法运行。如果我在手机上打开了该应用程序,它可以工作,但如果该应用程序在后台运行,则标签永远不会减少。这可能是由于模拟器和实际 iPhone 处理多任务的方式不同吗?如果是这样,我该如何更改我的代码,以便计时器仍会每分钟更新一次标签,以便在用户重新打开应用程序时显示正确的数字?
这是我的计时器设置:
var individualTaskTimer = NSTimer()
func createTimerForTopTask(){
individualTaskTimer = NSTimer.scheduledTimerWithTimeInterval(tasks[0].minutes * 60, target: self, selector: "deleteTopTask", userInfo: nil, repeats: true)
}
【问题讨论】:
-
这不一定是一个解决方案,但 Ole Begemann 写了一篇关于闹钟应用程序如何在 iOS 上处理多任务处理的高级文章。 oleb.net/blog/2014/02/alarm-clock-apps-ios
-
8.0 和 11.0 Beta 2 之间的 iOS Simualtor 运行时无法在应用程序进入后台时暂停它们。 iOS 11.0 Beta 3 Simulator(它是 Xcode 9.0 Beta 3 的一部分)解决了这个问题。应适当暂停后台应用以更好地匹配设备行为。