我在斯威夫特3.計時器在應用程序運行時啓動一段時間後延遲發射,由於未知原因,
我寫這個應用程序的方式是編寫一個簡單的鬧鐘應用程序,我有一個timer
集持續60秒,每次觸發時,它會檢查是否設置了該時間的警報,然後觸發警報。
此應用程序的目的是打開我的HomeKit連接的燈火,當它發生。這就是爲什麼我不能採取設置本地通知的方法,因爲執行時無法運行打開燈光的代碼。
我有這個應用程序設置爲在後臺運行(儘可能多的蘋果將允許它)的方式,如果應用程序打開時,你鎖定手機,它會繼續運行。
即使在很長的時間內,它也能在模擬器中完美工作。這也適用於我的手機,當我沒有把鬧鐘設置得太遠時。 但是,當我一夜之間將應用程序留在手機上時,它很少有用。
爲了進行調試,我在應用程序中創建了一個文本文件,並設置了timer
,這樣當它檢查時間時,它也會將時間寫入該文本文件。
我做到了這一點,所以我可以看到計時器是否會在整夜繼續運行。
這是我的結果。
昨天晚上4點我去睡覺,早上8點報警。 (我知道這很好,哈哈) 在文本文件中,當我離開應用程序運行時,計時器繼續運行好半小時,每分鐘記錄正確的時間。
爲了便於閱讀,我上傳了截圖。
注意它是怎麼記錄的每一分鐘。
但是,在晚上的晚些時候,計時器每分鐘停止發射,並開始變得更加流暢。
通知計時器在5:13 am
如何開槍,然後5:25 am
,5:53
,等等。
這發生在過去幾個晚上,我不知道該怎麼辦。
我沒有收到任何文本,或者我認爲會導致計時器應該每分鐘觸發一次,每半小時隨機啓動一次。
有什麼我可以做的,以確保這個計時器可靠地觸發每一分鐘?
如果您到此爲止,非常感謝!這是我的第一個應用程序,這是圍繞蘋果的背景限制進行的一場鬥爭。
謝謝!
不幸的是,iOS不適合長時間運行的時間安排後臺任務。您可以在某個地方使用服務器在需要的時間向您的應用程序發送無聲推送通知,這會觸發您的應用程序在後臺運行,您可以關閉燈光。此外,當您在Xcode調試器下運行時,後臺執行的限制會暫停,因此這就是您看到模擬器和設備之間存在差異的原因。 – Paulw11
因此,當我發送無聲推送通知時,我可以運行代碼來打開燈光?我認爲這僅限於從服務器下載內容。如果那不是真的那會很棒! – Jolaroux
你可以在'didReceiveRemoteNotification'方法中運行你想要的任何代碼;你只需要尊重後臺執行時間限制 – Paulw11