我有一个NSTimer
timer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(periodicTimer)
userInfo:nil
repeats:YES];
哪个
- (void)periodicTimer
{
NSLog(@"Bang!");
if (timerStart != nil)
[timerLabel setText:[[NSDate date] timeDifference:timerStart]];
}
问题是,在滚动tableview(或执行其他任务)时,标签不会更新,此外,“Bang!”没有出现,所以我认为该方法不会被调用。
我的问题是如何定期更新标签,即使用户正在使用应用界面。
答案 0 :(得分:25)
您需要将您的计时器添加到UITrackingRunLoopMode,以确保您的计时器在滚动期间也会触发。
NSRunLoop *runloop = [NSRunLoop currentRunLoop];
NSTimer *timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(myTimerAction:) userInfo:nil repeats:YES];
[runloop addTimer:timer forMode:NSRunLoopCommonModes];
[runloop addTimer:timer forMode:UITrackingRunLoopMode];
答案 1 :(得分:-2)
不确定这个,但我的第一个猜测是,在更新接口时,接口被呈现给定时器的主线程没有机会做任何事情。
您可以为计时器创建一个带有新运行循环的新线程,但这可能是一个丑陋的解决方案。你想要实现你的应用程序中的哪些功能?也许我们可以建议比使用计时器更好的策略。