2011-03-21 17 views
20

Estoy intentando borrar la insignia "no leída" de mi aplicación con UILocalNotification. Lógicamente se podría pensar que esto se haría mediante la creación de una instancia de applicationIconBadgeNumberUILocalNotification a 0. Pero esto no funciona, y la documentación para applicationIconBadgeNumber decir "El valor por defecto es 0, que significa" sin cambio “."Borrar insignia de aplicación con notificaciones locales

Entonces, ¿hay realmente ninguna manera de limpiar una insignia con las notificaciones locales una vez que se ha establecido

actualización:? Algunos simple código:.

-(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

'... Pero esto no funciona, ...' ¿Qué pasa cuando se intenta establecer la insignia a cero? – Moshe

+0

Cuando configuro la insignia en cero y se activa la notificación, no ocurre nada. Sigue mostrando con el mismo número que tenía antes. – peterjb

+0

¿Podemos ver algunos códigos, por favor? – Moshe

Respuesta

28

Tuve el mismo problema. Al configurar la insignia a partir de una notificación local, establecerla en 0 es el valor predeterminado para "sin cambios", mientras que hacerlo directamente desde la aplicación lo borrará. Establecerlo en un número negativo a través de una notificación local resolvió el problema.

intento:

clearEpisodeNotification.applicationIconBadgeNumber = -1; 
+1

¡Gracias! Eso es justo lo que necesitaba. – peterjb

+0

¡Funciona! Gracias. –

+0

Ambas respuestas solucionan el problema. Incluso si eliminamos la aplicación y la reinstalamos, aparece de nuevo. –

18

Sí, es posible borrar la tarjeta de identificación de la aplicación en sí

Uso el siguiente código en una de mis aplicaciones, y funciona como se esperaba (es decir, borra la insignia):

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

Ah, veo que quieres hacer usando una notificación local. ¿Por qué no quieres hacerlo desde la propia aplicación? – uvesten

+1

Es una aplicación que monitorea eventos en vivo que conoce mediante el análisis de un iCalendar, y actualiza su insignia en función de cuántos eventos en vivo se están ejecutando en este momento Si la cantidad de eventos en vivo cae a 0 mientras el usuario está fuera de la aplicación, la insignia debería desaparecer. – peterjb

Cuestiones relacionadas