gpt4 book ai didi

iphone - 倒数计时器不会停在 0

转载 作者:行者123 更新时间:2023-11-29 03:42:17 27 4
gpt4 key购买 nike

我有一个计时器,如果计时器位于前台,则该计时器可以完美工作。它完美地递减并停在0处。但是,当我点击home按钮进入主屏幕,然后等待本地通知弹出,然后我点击通知时,时间间隔变成了42亿(限制)对于无符号长整型)。基本上,它不会停止在 0。我不知道如何解决这个问题。我尝试将其设为常规 NSInteger 并检查间隔是否低于 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];
}
}

最佳答案

您在 stringWithFormat: 中使用的 %02u 将该值解析为无符号整数。

此外,我认为这是你的问题,你正在检查 if 语句中的 testTask.timeInterval,但从 interval 变量中获取秒数你到达方法的开头。因此,您始终会检查之前的值,这意味着您总是落后一秒。

编辑:你可以做这样的事情:

NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:date];
if (anotherTimeInterval-interval > 0){
...
}

这样,您就可以检查值而不是旧值。

希望对你有帮助

关于iphone - 倒数计时器不会停在 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18238511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com