我正在使用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
等。
请帮我解决这个问题。
答案 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
解决了它。 不要问我为什么。