Objective c 对[UIApplication sharedApplication].ApplicationOnBadgeNumber的更改未立即反映
当用户阅读消息时,我正在使用以下代码更改应用程序标记编号和选项卡栏上的标记。我看到一些无法解释的行为。如果在[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的更改是否需要一些时间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条件的计算结果
-(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。下一步,在我解决了所有的功能问题之后,我用睡眠来看看是否能解决它。我从来没有在实际代码中这样做过!