在我看来,applicationIconBadgeNumber
在调用委托方法时设置“同时”,而不是之前或之后,因为在委托方法中设置断点似乎会将徽章更新为您假装的数字。
所以,第一个(丑陋的)解决方案:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 125*NSEC_PER_MSEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
application.applicationIconBadgeNumber = 333;
});
}
(125ms 似乎可以解决问题)。
我虽然没有解决第二个解决方案。因为我试图即时修改applicationIconBadgeNumber
它……但它没有用readwrite
。UILocalNotification
第三种解决方案似乎有效,而且似乎很清楚。
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[application cancelLocalNotification:notification];
application.applicationIconBadgeNumber = 333;
}
(不过,我会建议application.applicationState
在这样做之前检查一下)
最终解决方案是您在最后一段中评论的内容:只需将applicationIconBadgeNumber
in设置applicationWillResignActive:
为正确的值。据我所知,当应用程序处于前台时,看不到徽章编号。