我需要一些从应用代表处收到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。
答案 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];