尝试根据给定的NSTimeInterval设置倒数计时器,标签似乎没有更新。

- (IBAction)startTimer:(id)sender{
      timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
}

- (void)timerAction:(NSTimer *)t {

    if(testTask.timeInterval == 0){
        if (self.timer){
            [self timerExpired];
            [self.timer invalidate];
            self.timer = nil;
        }

        else {
            testTask.timeInterval--;
        }
    }

    NSUInteger seconds = (NSUInteger)round(testTask.timeInterval);
    NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u",
                        seconds / 3600, (seconds / 60) % 60, seconds % 60];
    timerLabel.text = string;
}

最佳答案

问题是,您正在递减testTask.timeInterval中的if(testTask.timeInterval == 0),这种情况永远不会评估为true(因为将其设置为10)。这就是为什么标签上没有变化的原因。

您需要将其他情况放在第一个if语句之后(当前,您将其放在第二个if语句下)。

您需要像这样编写方法:

-(void)timerAction:(NSTimer *)t
{
        if(testTask.timeInterval == 0)
        {
            if (self.timer)
            {
                [self timerExpired];
                [self.timer invalidate];
                self.timer = nil;
            }
       }
       else
       {
            testTask.timeInterval--;
       }
       NSUInteger seconds = (NSUInteger)round(testTask.timeInterval);
       NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u",
                        seconds / 3600, (seconds / 60) % 60, seconds % 60];
       timerLabel.text = string;
}

10-08 05:30