我正在显示使用UILabel
和NSTimer
的倒数计时器-
-(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等(有些奇怪的行为)但是,两个
NSLogs
(coolTime
和coolTimeLbl
)在所有时间和值下均能完美打印。为什么会这样?我尝试了很多方法,例如
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;
....
}