2016-10-12 13 views
0

私はtimerを持っていて1秒ごとにnumberを増やすmacOSアプリを持っています。 60秒ごとに何らかのメッセージが表示されます。SwiftとmacOS:アプリがバックグラウンドで動作しているときにTimerが遅れて動作する

私のmacOS Swiftアプリが少し遅れて実行され、10分後にスリープ状態になりました(新しいaはなくなりました)。

私はこのように、いくつかの解決策を見つけた:

private func startTimer() { 
    timer = Timer.scheduledTimer(
     timeInterval: 1.0, 
     target: self, 
     selector: #selector(timerTick), 
     userInfo: nil, 
     repeats: true 
    ) 
    RunLoop.main.add(timer, forMode: RunLoopMode.commonModes) 
} 

しかし、このコマンドは、タイマーのバックグラウンド実行に遅れを修正するために私を助けていない: RunLoop.main.add(タイマー、forMode:RunLoopModeを.commonModes)

私はこの面白い挑戦を解決するのを助けることができる経験豊富な迅速な男が必要です。バックグラウンドアプリで秒数を正確にカウントする必要があります。なぜなら、アプリは数分おきにアラートメッセージを表示してくれて、私にこれらのアラートを正しく表示できない場合、私のアプリは期待通りに動作しません。

ありがとうございました!

+0

あなたがAppleのApp Nap機能(http://arstechnica.com/apple/2013/10/os-x-10-9/13/)に似ているようなサウンドが聞こえます。 1秒に1回の繰り返しタイマーをスケジューリングしてカウンタを増やす代わりに、コールバックを1回だけコールし、数分後に次のタイマーコールバックをスケジュールすることができるシングルショットタイマーをスケジュールする方が良い場合があります。 –

+0

関連:http://stackoverflow.com/questions/27653939/disable-app-nap-in-swift –

+0

問題の解決策がまだ見つかりませんでした。 –

答えて

0

私はあなたがApp Napに遭遇していると考えています。あなたは、あなたのプロセスがNSProcessInfoを経由してApp Napで巻き込まれるべきではないことをシステムに伝えることについて何らかのコントロールをしています。

また、App Nap defaults write <app domain name> NSAppSleepDisabled -bool YESを無効にしようとするかもしれませんが、それでも動作するかどうかはわかりません(App NapがOS X 10.9で導入されたため、3年の時間で無効機能が無効になっている可能性があります)。 ..)

関連する問題