In my app, I have NSTimer which updates UILabel every second. I've added UIBackgroundTaskIdentifier before NSTimer to let it run in background.
__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];
    }); 
}
Problem is when we press home button app gets into background, timer is running but uilabel is not updating. E.g. Say, _timeLbl displaying '45'. Now if I press home button, app goes into background. After 10 sec. I click app icon to get app in foreground, and there I see '45' for a while (fraction of second) and then it display 35, instead of directly display 35. That means label is not getting updated with NSTimer. Is there any workaround to solve this ?
Thanks !