Очистить значок приложения с локальными уведомлениями - PullRequest
21 голосов
/ 21 марта 2011

Я пытаюсь очистить "непрочитанный" значок моего приложения с помощью 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];
}

Ответы [ 2 ]

28 голосов
/ 09 июня 2011

У меня была такая же проблема. При установке значка из локального уведомления установка его в 0 является значением по умолчанию для «без изменений», в то время как выполнение этого прямо из приложения очистит его. Установка отрицательного числа через локальное уведомление решила проблему.

попробовать:

clearEpisodeNotification.applicationIconBadgeNumber = -1;
18 голосов
/ 21 марта 2011

Да, значок можно удалить из самого приложения.

Я использую приведенный ниже код в одном из моих приложений, и он работает как положено (то есть очищает значок):

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