1

fireシンプルなOSXメニューバーアプリケーションがあり、ステータスアイテムにメニューが添付されており、NSTimerに手動で送信できるメニューアイテムがあります。

そのメニュー項目に、次にタイマーが起動するまでの秒数を表示したいと思います。次の発砲までの時間またはNSTimerが次に発火する時間を取得する方法はありますか?

4

2 に答える 2

4

NSTimerには、NSDateを返すfireDateがあります。NSDateにはtimeIntervalSinceNowがあります。

于 2013-01-07T01:56:29.533 に答える
2

すでに受け入れられている答えがあることは知っていますが、あなたが実際にはまったく興味がないかもしれないということが私に思い浮かびましたfireDate

その日付を使用すると、時刻が表示されている限り、同じ秒数しか表示されません。メニューバーに直接表示されている場合、進行状況は表示されません…</ p>

そのため、少し異なるアプローチを提案します。

  1. 有効期限を計算して保存します。
  2. 表示された精度に一致する間隔で起動し、保存された有効期限を使用して残り時間の表示を更新する繰り返しタイマーをスケジュールします。
  3. 有効期限が過ぎたらすぐにタイマーを無効にして、やりたいことを何でもします。

では、1秒のタイマーと、デクリメントするカウンター変数を使用してみませんか?

シンプル:NSTimerリアルタイムのものではありません。タイマーが起動する実際の日付とそのスケジュールfireDateは少し異なります。ただし、タイマーを繰り返すと、その差を調整せずに再スケジュールされるため、これらの偏差が加算されます。

これらの偏差は、アプリの負荷だけでなくシステム全体にも依存するため、完全に予測できません。したがって、それらは「完全に無視できる」と「ZOMFG」の間で異なります。

于 2013-01-07T09:39:53.323 に答える