在我的应用程序中,我NSTimer
每秒更新一次 UILabel。我之前添加UIBackgroundTaskIdentifier
过NSTimer
让它在后台运行。
__block UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:updateTimer forMode:NSRunLoopCommonModes];
. . .
-(void)updateTime
{
secondsLeft -= 1;
//NSLog(@"Update time : %d ......",secondsLeft);
dispatch_async(dispatch_get_main_queue(), ^{
_timeLbl.text = [NSString stringWithFormat:@"%d",secondsLeft];
});
}
问题是当我们按下主页按钮应用程序进入后台时,计时器正在运行但uilabel
没有更新。例如,_timeLbl
显示“45”。现在,如果我按主页按钮,应用程序将进入后台。10 秒后。我单击应用程序图标以在前台获取应用程序,然后我看到“45”一段时间(秒的小数部分),然后显示 35,而不是直接显示 35。这意味着标签没有更新为NSTimer
. 有什么办法可以解决这个问题吗?
谢谢 !