0

尝试从给定的 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;
}
4

2 回答 2

2

我相信您的 if 语句嵌套不正确。像这样将你的 else 语句移动到最外面的“if”。

    if(testTask.timeInterval == 0){
        if (self.timer){
            [self timerExpired];
            [self.timer invalidate];
            self.timer = nil;
        }
    } else {
        testTask.timeInterval--;
    }
于 2013-07-30T18:27:06.320 回答
2

问题是,您正在递减testTask.timeInterval内部if(testTask.timeInterval == 0),此条件永远不会评估为真(因为您将其设置为 10)。这就是标签没有变化的原因。

您需要将 else case 放在第一个 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;
}
于 2013-07-30T18:27:26.760 回答