UILabel使用NSTimer更新错误

时间:2014-08-05 18:52:37

标签: ios objective-c uilabel nstimer

我正在使用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等(一些奇怪的行为)
不过,NSLogscoolTime& coolTimeLbl)都可以完美地打印所有时间和值。

为什么会这样?我试过很多方法,比如NSNotification等。 请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

如果您在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;
    ....
}

答案 1 :(得分:0)

在我的一个viewControllers中有同样的问题,另一个问题是使用相同的NSTimer代码正常工作。看了大约20个SO线程来解决它。没运气。在我的情况下

myLabel.opaque = false

解决了它。 不要问我为什么。