2016-12-07 45 views
0

我在斯威夫特3.计时器在应用程序运行时启动一段时间后延迟发射,由于未知原因,

我写这个应用程序的方式是编写一个简单的闹钟应用程序,我有一个timer集持续60秒,每次触发时,它会检查是否设置了该时间的警报,然后触发警报。

此应用程序的目的是打开我的HomeKit连接的灯火,当它发生。这就是为什么我不能采取设置本地通知的方法,因为执行时无法运行打开灯光的代码。

我有这个应用程序设置为在后台运行(尽可能多的苹果将允许它)的方式,如果应用程序打开时,你锁定手机,它会继续运行。
即使在很长的时间内,它也能在模拟器中完美工作。这也适用于我的手机,当我没有把闹钟设置得太远时。 但是,当我一夜之间将应用程序留在手机上时,它很少有用。

为了进行调试,我在应用程序中创建了一个文本文件,并设置了timer,这样当它检查时间时,它也会将时间写入该文本文件。

我做到了这一点,所以我可以看到计时器是否会在整夜继续运行。

这是我的结果。

昨天晚上4点我去睡觉,早上8点报警。 (我知道这很好,哈哈) 在文本文件中,当我离开应用程序运行时,计时器继续运行好半小时,每分钟记录正确的时间。

为了便于阅读,我上传了截图。

http://imgur.com/a/lPAZD

注意它是怎么记录的每一分钟。

但是,在晚上的晚些时候,计时器每分钟停止发射,并开始变得更加流畅。

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

通知计时器在5:13 am如何开枪,然后5:25 am5:53,等等。

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

我没有收到任何文本,或者我认为会导致计时器应该每分钟触发一次,每半小时随机启动一次。

有什么我可以做的,以确保这个计时器可靠地触发每一分钟?

如果您到此为止,非常感谢!这是我的第一个应用程序,这是围绕苹果的背景限制进行的一场斗争。
谢谢!

+1

不幸的是,iOS不适合长时间运行的时间安排后台任务。您可以在某个地方使用服务器在需要的时间向您的应用程序发送无声推送通知,这会触发您的应用程序在后台运行,您可以关闭灯光。此外,当您在Xcode调试器下运行时,后台执行的限制会暂停,因此这就是您看到模拟器和设备之间存在差异的原因。 – Paulw11

+0

因此,当我发送无声推送通知时,我可以运行代码来打开灯光?我认为这仅限于从服务器下载内容。如果那不是真的那会很棒! – Jolaroux

+1

你可以在'didReceiveRemoteNotification'方法中运行你想要的任何代码;你只需要尊重后台执行时间限制 – Paulw11

回答

0

你的方法是不起作用的。Apple不会允许您在后台不断运行应用程序。这会耗尽用户电池的匆忙。您可能想要设置本地通知。您可以将这些设置为在将来随时关闭。

在最近的iOS版本中,Apple会调整定时器的启动时间以节省电量。我不知道如何从后台大幅改变计时器的间隔,但这听起来像是发生了什么。

+0

我应该编辑我的主帖,但这个应用程序实际上打开了我的HomeKit连接的灯,当警报发生时。因此,我无法设置本地通知,因为无法执行打开灯光所需的代码。这就是为什么我采取这种方法,我想不出有另一种方式来使这个应用程序的功能。 – Jolaroux

+0

你能想到我可以采取的其他方法吗? – Jolaroux

相关问题