4

時間のカウントダウンを減らしたい。したがって、ユーザーがアプリを最小化すると、アプリはバックグラウンドをロードします。アプリケーションのバックグラウンドでタイマーを実行するにはどうすればよいですか? 以下のコードを使用しています。アプリが最小化されると、タイマーが停止します。私を助けてください。

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

- (void)timerCountDown
{
    if(secondsLeft > 0 ) {
        secondsLeft -- ;
        hours = secondsLeft / 3600;
        minutes = (secondsLeft % 3600) / 60;
        seconds = (secondsLeft %3600) % 60;
    }
}
4

2 に答える 2

29

私は答えを得ました、それは完全に機能しています。

UIBackgroundTaskIdentifier bgTask =0;
UIApplication  *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask];
}];

timer = [NSTimer
               scheduledTimerWithTimeInterval:1.0
               target:self
               selector:@selector(timerCountDown:)
               userInfo:nil
               repeats:YES];
于 2012-10-17T11:17:21.157 に答える
6

アプリケーションはバックグラウンドで永久に実行されるわけではありません。アプリを閉じたときにタイマーが継続することを保証することはできません。

アプリ デリゲートの applicationDidEnterBackground 内に、applicationWillEnterForeground のときにタイマーを続行できるデータを保存します。あなたの特定のケースでは、バックグラウンドでタイマーを無効にし、フォアグラウンドに入ると再び開始します。secondsLeft を使用して、NSDates の差から計算し、開始日と終了日を保存したい場合があります。

于 2012-10-16T14:18:45.463 に答える