我的倒数计时器方法出了什么问题?

时间:2013-07-30 18:08:35

标签: iphone ios objective-c nstimer countdown

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

你需要在第一个if语句之后添加else case(目前你将它放在第二个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;
}