2011-03-21 74 views
20

我正在嘗試清除我的應用程序的「未讀」徽章,其中包含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]; 
} 
+0

'...但它不工作,...'會發生什麼,當你嘗試設置徽章爲零? – Moshe 2011-03-21 13:33:15

+0

當我將徽章設置爲零並且通知觸發時,_nothing_發生。它繼續顯示與之前相同的號碼。 – peterjb 2011-03-21 19:18:23

+0

我們可以看一些代碼嗎? – Moshe 2011-03-21 19:32:14

回答

28

我有同樣的問題。從本地通知中設置徽章時,將其設置爲0是「不變」的默認設置,而直接從應用程序執行則會清除它。通過本地通知將其設置爲負數解決了問題。

嘗試:

clearEpisodeNotification.applicationIconBadgeNumber = -1; 
+1

謝謝,這正是我需要的 – peterjb 2011-06-10 06:44:27

+0

它的工作原理謝謝 – 2014-11-27 11:26:23

+0

這兩個答案都解決了這個問題。它存儲?即使我們刪除應用程序並重新安裝,它再次出現。 – 2015-09-26 09:48:46

18

是的,這是可能的清除程序本身的徽章

我在我的一個應用程序中使用下面的代碼,並且它按預期工作(即清除徽章):

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

啊,我看你想做它使用本地通知爲什麼你不想在應用程序本身內部做它 – uvesten 2011-03-21 08:45:13

+1

它是一個應用程序,通過解析iCalendar來監視它所瞭解的活動事件,並根據現在正在運行的活動事件數來更新其徽章如果在用戶離開應用程序時現場活動的數量下降到0,徽章應該消失 – peterjb 2011-03-21 19:16:39

相關問題