我正在Swift 3中编写一个简单的闹钟应用程序。

我编写此应用程序的方式是,将timer设置为60秒,每次触发时,它都会检查是否为该时间设置了警报,然后触发该警报。

此应用程序的目的是在我的HomeKit连接的灯点亮时将其打开。这就是为什么我不能采用设置本地通知的原因,因为当执行该通知时,无法运行打开电灯的代码。

我已将此应用程序设置为在后台运行(在Apple允许的范围内),如果您在锁定手机时打开了该应用程序,它将继续运行。
即使在很长的时间内,这也可以在模拟器中完美运行。当我没有将闹钟设置得太远时,这也可以在我的手机上使用。
但是,当我将应用程序放在手机上过夜时,它几乎无法工作。

为了调试此问题,我在应用程序中创建了一个文本文件,并设置了timer,以便在检查时间时也将时间写入该文本文件。

我这样做是为了知道计时器是否可以在一整夜内继续运行一整夜。

这是我的结果。

昨晚,我于凌晨4点上床睡觉,并设定了早上8点的闹钟。 (我知道那太好了,哈哈)
在文本文件中,当我让应用程序运行时,计时器继续运行了一个半小时,每分钟记录正确的时间。

为了便于阅读,我上传了一个屏幕截图。

http://imgur.com/a/lPAZD

请注意它是如何记录每分钟的。

但是,在深夜,计时器停止了每分钟触发,并开始变得更加零星。

http://imgur.com/a/8Emd9

请注意计时器如何在5:13 am,然后在5:25 am5:53等处触发。

这在过去的两个晚上发生过,我不知道该怎么办。

我没有收到任何文本,或者我认为会导致计时器每分钟触发,每半小时随机触发的任何其他消息。

我有什么办法可以确保此计时器可靠地每分钟触发一次?

如果您做到了这一点,非常感谢!这是我的第一个应用程序,这是围绕Apple的背景限制而进行的努力。
谢谢!

最佳答案

您的方法是入门。 Apple不允许您使应用程序在后台持续运行。这将很快耗尽用户的电池电量。您可能要设置本地通知。您可以将它们设置为在将来的任何时间关闭。

在最新版本的iOS中,Apple会调整计时器触发时间,以节省电池电量。我不知道是如何从后台疯狂更改计时器的间隔,但这听起来确实像发生了什么。

关于ios - 由于未知原因,应用程序中运行的计时器会在一段时间后开始延迟触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41008925/

10-14 15:33
查看更多