Ios 在后台运行计时器
我正在用Swift写一个应用程序,里面有一个计时器倒计时,很像倒计时钟。为此,我在主逻辑类中使用以下代码:Ios 在后台运行计时器,ios,swift,timer,nstimer,background-process,Ios,Swift,Timer,Nstimer,Background Process,我正在用Swift写一个应用程序,里面有一个计时器倒计时,很像倒计时钟。为此,我在主逻辑类中使用以下代码: func start() { self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in self.run() } } 现在,每次我关闭应用程序时,计时器都会停止,并出现以下错误: BackgroundTask:不存在标识符为1(0x1)的后台任务,或者该
func start() {
self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
self.run()
}
}
现在,每次我关闭应用程序时,计时器都会停止,并出现以下错误:
BackgroundTask:不存在标识符为1(0x1)的后台任务,或者该任务可能已结束
有没有办法继续在后台运行计时器?或者你有没有其他更优雅的方法来解决我的问题?我已经在stackoverflow上搜索了几个小时,但似乎找不到答案。在你的应用程序被备份后,苹果将不允许你长时间运行进程。从文档中: 执行长时间运行的任务 对于需要更多执行时间才能执行的任务,您必须请求特定的权限,以便在后台运行这些任务,而不会挂起它们。在iOS中,仅允许特定应用类型在后台运行:
- 在后台向用户播放音频内容的应用程序,如音乐播放器应用程序
- 在后台录制音频内容的应用程序
- 随时通知用户其位置的应用程序,如导航应用程序
- 支持互联网语音协议(VoIP)的应用程序
- 需要定期下载和处理新内容的应用程序
- 从外部附件接收定期更新的应用程序
- 实现这些服务的应用程序必须声明它们支持的服务,并使用系统框架实现这些服务的相关方面李>
话虽如此,如果你真的只是想更新一个“倒计时时钟”,我会简单地存储应用程序后台运行时的当前系统时间(可能是用户默认值)。然后,当应用程序返回前台时,将存储的时间与当前时间进行比较,并执行必要的计算,以确定时钟应显示的时间 这回答了你的问题吗@可能是特贾南达穆里,但我必须做大量的工作才能摆脱这一困境。谢谢你的链接,很有用。你看到这个了吗?根据倒计时的方式/内容,您可以使用UserDefaults并在计时器启动时保存时间戳,在应用程序进入后台时停止计时器,然后在应用程序再次激活时检查此时间戳并重新启动计时器。