我的应用程序中有一个秒表屏幕。
有一个主标签,表示每100毫秒的通过时间(不断更新)。
在该标签下方,在同一个ViewController中我有一个UITableView。
每当我滚动UITableView时,秒表标签就会停止更新。
我尝试使用Grand Central Dispatch如下,但是它没有用,我没想到会这样,因为它仍然是在同一队列上运行的两个操作。
dispatch_async(dispatch_get_main_queue(),^{ MyTimerObject *t = (MyTimerObject*)notification.object; lblMainTimer.text = t.MainTimerStringValue;});
那我该怎么办呢?
这一切都发生在NSNotification的receiveNotification方法中,这让我想知道在表滚动事件期间是不是NSNotification锁定而不是标签更新......
答案 0 :(得分:0)
您的秒表是使用NSTimer
还是CADisplayLink
更新的?滚动时无法更新的问题通常是运行循环模式的错误选择。
例如,当tableview滚动时,这将暂停。
NSTimer *timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(handleTimer:) userInfo:nil repeats:TRUE];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
然而这不会:
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
底线,不要使用NSDefaultRunLoopMode
,而是使用NSRunLoopCommonModes
,即使滚动表格视图,您也可能会发现它继续运行。