Вот мой код (немного упрощенный).У меня NSTimer срабатывает каждую секунду, что вычитает одно из переменной counter
.Когда приложение работает в фоновом режиме, я останавливаю счетчик и сохраняю время, в течение которого счетчик достигнет нуля, до значения NSDefault.
Однако при восстановлении приложения из фона, когда я вычитаю текущее время из «нулевого» времени, я иногда получаю слишком большие значения.Помогите мне найти ошибку, пожалуйста?
- (void)prepareToEnterBackground {
NSUserDefaults *defaults;
defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:[self timerIsRunning] forKey:@"timer_is_running"];
[defaults setInteger:workPlayStatus forKey:@"work_play_status"];
if ([self timerIsRunning]) {
[defaults setFloat:([[NSDate date] timeIntervalSince1970] + (float) counter) forKey:@"timestamp_for_status_change"];
} else {
[defaults setFloat:0.0 forKey:@"timestamp_for_status_change"];
}
if (timer!=nil) {
[timer invalidate];
timer = nil;
}
}
- (void)restoreFromBackground {
NSUserDefaults *defaults;
defaults = [NSUserDefaults standardUserDefaults];
NSInteger remainingTimerSeconds;
if ([defaults integerForKey:@"timer_is_running"]) {
remainingTimerSeconds = (int) ([defaults floatForKey:@"timestamp_for_status_change"] - [[NSDate date] timeIntervalSince1970]);
if (remainingTimerSeconds <= 0) {
remainingTimerSeconds = 0;
}
} else {
remainingTimerSeconds = 0;
}
if (remainingTimerSeconds > 0) {
counter = remainingTimerSeconds;
workPlayStatus = [defaults integerForKey:@"work_play_status"];
timer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(advanceTimer:)
userInfo:nil
repeats:YES];
}
}