Objective c 对[UIApplication sharedApplication].ApplicationOnBadgeNumber的更改未立即反映

Objective c 对[UIApplication sharedApplication].ApplicationOnBadgeNumber的更改未立即反映,objective-c,cocoa-touch,Objective C,Cocoa Touch,当用户阅读消息时,我正在使用以下代码更改应用程序标记编号和选项卡栏上的标记。我看到一些无法解释的行为。如果在[UIApplication sharedApplication].ApplicationOnBadgeNumber=1时调用该方法,则ApplicationOnBadgeNumber将递减为0。但是,除非我在递减和下一个if([UIApplication sharedApplication].ApplicationOnBadgeNumber>=1)之间有睡眠(1),否则if条件的计算结果

当用户阅读消息时,我正在使用以下代码更改应用程序标记编号和选项卡栏上的标记。我看到一些无法解释的行为。如果在[UIApplication sharedApplication].ApplicationOnBadgeNumber=1时调用该方法,则ApplicationOnBadgeNumber将递减为0。但是,除非我在递减和下一个if([UIApplication sharedApplication].ApplicationOnBadgeNumber>=1)之间有睡眠(1),否则if条件的计算结果为True,DDLogPrint显示“将选项卡栏标记设置为0,因为appbadge为0”。如果我使用sleep行,那么事情就会按预期进行(即tab bar badge被设置为nil)

对[UIApplication sharedApplication].ApplicationOnBadgeNumber的更改是否需要一些时间

-(void) decrementBadges
{

 AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
 UITabBarController *myTabBarController = (UITabBarController *)appDelegate.window.rootViewController;
 UITabBarItem *tbItem = (UITabBarItem *)[myTabBarController.tabBar.items objectAtIndex:CHAT_TAB_INDEX];

 DDLogVerbose(@"In decrement badges with badge number = %ld, tab bar icon = %@, numMessageRead=%ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber,tbItem.badgeValue, (long)[[NSUserDefaults standardUserDefaults] integerForKey:@"numMsgRead"]) ;

 if([UIApplication sharedApplication].applicationIconBadgeNumber>=1)
 {
    [UIApplication sharedApplication].applicationIconBadgeNumber-- ;
 }

 //sleep(1) ; //If I uncomment this line, then it works, tab bar badge gets set to nil when method is called with applicationIconBadgeNumber =1
 if([UIApplication sharedApplication].applicationIconBadgeNumber>=1)
 {
    tbItem.badgeValue = [NSString stringWithFormat:@"%ld", (long)[UIApplication sharedApplication].applicationIconBadgeNumber];
    DDLogVerbose(@"Setting tab bar badge to %@ because appbadge is %ld",tbItem.badgeValue,(long)[UIApplication sharedApplication].applicationIconBadgeNumber) ;
 }
 else
 {
    tbItem.badgeValue = nil;
    DDLogVerbose(@"Setting tab bar badge to nil because appbadge is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber) ;
 }
} 

您的
decrementBadges
方法是否正在后台线程上调用?您发布的所有代码都需要在主线程上运行。不要在主线程上使用
sleep
。我目前正在主线程上运行所有操作。我还没到GCD。下一步,在我解决了所有的功能问题之后,我用睡眠来看看是否能解决它。我从来没有在实际代码中这样做过!