Voici mon code (simplifié un peu). J'ai un NSTimer tirant chaque seconde qui soustrait un de la variable counter
. Lorsque l'application passe en arrière-plan, j'arrête le compteur et enregistre le temps que le compteur atteindra zéro dans une valeur NSDefault.Problème avec un compte à rebours en arrière-plan dans iOS
Cependant, lors de la restauration de l'application à partir de l'arrière-plan, lorsque je soustrais l'heure actuelle de l'heure «zéro», j'ai parfois des valeurs qui sont trop grandes. Aidez-moi à trouver le bug s'il vous plaît?
- (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];
}
}
quelle variable est à grande? – tadejsv