我正在显示使用UILabelNSTimer的倒数计时器-

-(void)a_Method
{
    [coolTimeLbl setNeedsDisplay];
    coolTime = 5;  // it is an int
    coolingTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(cooling) userInfo:nil repeats:YES];  // NSTimer
}

-(void)cooling
{
    if (coolTime>0)
    {
        coolTime = coolTime-1;

        NSLog(@" coolTime----%@",coolTime);
        coolTimeLbl.text =[NSString stringWithFormat:@"%d",coolTime];
        NSLog(@" coolTimeLbl----%@",coolTimeLbl.text);
    }
    else
    {
        [coolingTimer invalidate];
        coolingTimer = nil;
    }
}


第一次一切正常,我得到coolTimeLbl.text为-4 3 2 1 0

但是第二次我呼叫aMethod时,coolTimeLbl无法正确更新-就像3 2 0等(有些奇怪的行为)
但是,两个NSLogscoolTimecoolTimeLbl)在所有时间和值下均能完美打印。

为什么会这样?我尝试了很多方法,例如NSNotification等。
请帮助我解决此问题。

最佳答案

如果在coolingTimer使自身无效之前多次调用a_Method,则计时器将滴答多次。

您应该添加一些布尔值,如;

BOOL isTimerValid;


在a_Method中,

if(!isTimerValid)
{
    isTimerValid = YES;
    coolingTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(cooling) userInfo:nil repeats:YES];  // NSTimer
}


在冷却中

else
{
    isTimerValid = NO;
    ....
}

10-05 20:05