我正在尝试使用UILocalNotification
清除我应用的“未读”徽章。逻辑上你会认为这可以通过将applicationIconBadgeNumber
实例的UILocalNotification
设置为0来完成。但它不起作用,而applicationIconBadgeNumber的文档说“默认值为0,这意味着”否发生变化。“>
一旦设置了徽章,真的没有办法清除带有本地通知的徽章吗?
更新:一些简单的代码:
-(void)applicationDidFinishLaunching
{
// Set the appication icon badge to 1 in 10 minutes, using a local notification so it works in the background:
// This works fine.
UILocalNotification *episodeNotification = [[UILocalNotification alloc] init];
episodeNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:(60 * 10)];
episodeNotification.timeZone = [NSTimeZone defaultTimeZone];
episodeNotification.applicationIconBadgeNumber = 1;
[[UIApplication sharedApplication] scheduleLocalNotification:episodeNotification];
[episodeNotification release];
// Clear the application icon badge in 20 minutes, again using a local notifcation so it works in the background:
// This doesn't work. According to the docs for local notification it's not supposed to
// because (applicationIconBadgeNumber = 0) means "Do not change the badge"
// I'm looking for an alternative if it exists.
UILocalNotification *clearEpisodeNotification = [[UILocalNotification alloc] init];
clearEpisodeNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:(60 * 20)];
clearEpisodeNotification.timeZone = [NSTimeZone defaultTimeZone];
clearEpisodeNotification.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] scheduleLocalNotification:clearEpisodeNotification];
[clearEpisodeNotification release];
}
答案 0 :(得分:28)
我遇到了同样的问题。从本地通知设置徽章时,将其设置为0是“无更改”的默认设置,而直接从应用程序执行此操作将清除它。通过本地通知将其设置为负数解决了问题。
尝试:
clearEpisodeNotification.applicationIconBadgeNumber = -1;
答案 1 :(得分:18)
是的,可以从应用程序本身清除徽章。
我在我的某个应用中使用了以下代码,它按预期工作(即清除徽章):
//clear app badge
[UIApplication sharedApplication].applicationIconBadgeNumber=0;