在滚动内部UITableView时处理NSNotification

时间:2014-07-14 15:13:04

标签: ios objective-c uiviewcontroller nsnotificationcenter nsnotification

我需要一些从应用代表处收到UIViewController的{​​{1}}。它就像一个计时器,但每个NSNotification处理你的方式。我的问题是:当我与用户界面交互时,UIViewController没有收到通知,导致问题。

这是我在AppDelegate中的代码:

UIViewController

我正在处理每个-(void)updateCounter:(NSTimer *)theTimer{ [[NSNotificationCenter defaultCenter] postNotificationName:TimeTickNotification object:nil]; } //*called by some trigger in the app -(void) startTimer{ timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES]; } 中的通知,如下所示:

UIViewController

我应该怎么做才能与UI交互并同时更新它?当用户与UI交互时,可能不会抛出NSNotification。

2 个答案:

答案 0 :(得分:1)

您需要确保更新主线程上的任何UI。如果要更新UI以在标签中包含新的totalTime,请确保主线程上正在运行setText:函数。您可以使用GCD实现这一目标,如下所示:

-(void) updateGlobalTime:(NSNotification *) notification{
        totalTime = [NSNumber numberWithFloat:([ficha.tempoTotal floatValue] + STEP)];

        // Update label on main thread
        dispatch_async(dispatch_get_main_queue(), ^{

             [label setText:totalTime];
        });
}

答案 1 :(得分:1)

解决方案是使用NSRunLoop,如下所示:

NSRunLoop *runloop = [NSRunLoop currentRunLoop];
timer = [NSTimer
             scheduledTimerWithTimeInterval:0.5
             target:self
             selector:@selector(updateCounter:)
             userInfo:nil
             repeats:YES];
[runloop addTimer:timer forMode:NSRunLoopCommonModes];
[runloop addTimer:timer forMode:UITrackingRunLoopMode];