【问题标题】:Clear app badge with local notifications使用本地通知清除应用程序徽章
【发布时间】:2011-07-19 12:31:58
【问题描述】:

我正在尝试使用 UILocalNotification 清除我的应用的“未读”标记。从逻辑上讲,您会认为这可以通过将 UILocalNotification 实例的 applicationIconBadgeNumber 设置为 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];
}

【问题讨论】:

  • ...But it doesn't work,... 当您尝试将徽章设置为零时会发生什么?
  • 当我将徽章设置为零并触发通知时,什么都没有发生。它继续显示与以前相同的数字。
  • 来自UILocalNotification 类文档,“默认值为 0,表示‘没有变化’。”文档没有提到下面的解决方案(负数),但它有效。跨度>

标签: iphone ios uilocalnotification


【解决方案1】:

我遇到了同样的问题。从本地通知设置徽章时,将其设置为 0 是“无更改”的默认设置,而直接从应用程序执行此操作会清除它。通过本地通知将其设置为负数解决了问题。

尝试:

clearEpisodeNotification.applicationIconBadgeNumber = -1;

【讨论】:

【解决方案2】:

是的,可以从应用程序本身清除徽章。

我在我的一个应用程序中使用以下代码,它按预期工作(即清除徽章):

//clear app badge
[UIApplication sharedApplication].applicationIconBadgeNumber=0;

【讨论】:

  • 啊,我知道您想使用本地通知来执行此操作。您为什么不想在应用程序本身内执行此操作?
  • 这是一个应用程序,它通过解析 iCalendar 来监控它所知道的实时事件,并根据当前正在运行的实时事件的数量更新其徽章。如果用户离开应用时实时事件的数量降至 0,则徽章应该会消失。
猜你喜欢
  • 2022-01-21
  • 2011-08-23
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多