2

私はそれが解放されるべきである後8時間(28800秒)まで数えなければならないタイマーを持っています

タイマーをバックグラウンドで実行し続ける方法や、アプリケーションを閉じたときに実行し続ける方法を知りたいですか?

これはNSTimerです:

stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                      target:self
                                                    selector:@selector(updateTimer)
                                                    userInfo:nil
                                                     repeats:YES];

これが私の状態です:

 counter++;

if (counter >= 28800) {
    [stopWatchTimer invalidate];
    counter =0;

    timeLabel.text = @"Time Out";
}
4

2 に答える 2

2

できません。アプリを閉じると、アプリは実行されなくなるため、タイマーも実行されなくなります。

ローカル通知を見てみませんか?

于 2012-06-03T11:18:21.917 に答える
2

アプリケーションがバックグラウンドで実行される場合、–(void)applicationDidEnterBackground:アプリケーションデリゲートメソッドは、現在のカウンター値と現在の時刻をnsuserdefaultに追加します。

その前にアプリケーションがアクティブになると–(void)applicationWillEnterForeground:そのメソッドで呼び出され、アプリケーションがバックグラウンドであった合計秒数を取得します。つまり、(アプリケーションの現在の時刻)–(nsuserdefaultに格納されているアプリケーションがバックグラウンドになった時刻)秒単位で計算します

したがって、これを–(void)applicationWillEnterForegroundにも追加します。

 if((seconds calculated) > (28800 - (current counter value stored in nsuserdefault)))
 {
    // stop timer as it has gone beyond eight hours
 } 
 else
 {
  // continue task
 }
于 2012-06-03T12:20:19.093 に答える