У меня есть таймер, который отлично работает, если таймер находится на переднем плане. Он отлично прекращается и останавливается на 0. Однако, когда я нажимаю кнопку homebutton, чтобы перейти на главный экран, а затем дождитесь появления локального уведомления, а затем я коснусь уведомления, временной интервал превратится в 4,2 миллиарда (предел для unsigned long int). В принципе, он не останавливается на 0. Я не уверен, как это исправить. Я попытался сделать его обычным NSInteger и проверить, был ли интервал ниже 0, но я получил те же результаты.Таймер обратного отсчета не останавливается на 0
-(IBAction)startTimer:(id)sender{
if (!timer) {
[startButton setTitle:@"Start" forState:UIControlStateNormal];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
date = [NSDate date];
} else {
[startButton setTitle:@"Stop" forState:UIControlStateNormal];
anotherTimeInterval = testTask.timeInterval;
[timer invalidate];
timer = nil;
}
}
-(void)timerAction:(NSTimer *)t
{
NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:date];
if (testTask.timeInterval > 0){
NSError *error;
if (![self.context save:&error]) {
NSLog(@"couldn't save: %@", [error localizedDescription]);
}
NSUInteger seconds = (NSUInteger)round(anotherTimeInterval-interval);
NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u",
seconds/3600, (seconds/60) % 60, seconds % 60];
testTask.timeInterval = seconds;
timerLabel.text = string;
NSLog(@"%@", string);
} else {
NSLog(@"timer ended");
[self.timer invalidate];
self.timer = nil;
[self timerExpired];
}
}
-(void)applicationWillResignActive:(UIApplication *)application{
if (timer){
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:testTask.timeInterval];
localNotification.alertBody = @"Time is up";
localNotification.alertAction = @"Ok";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
}
ОК, что имеет смысл ... так вы говорите, я не должен проверить для значения testtask.interval, а что-то другое? – EvilAegis
Я обновил свой ответ –