2012-03-04 13 views
51

En esta aplicación que estoy tratando de hacer, utilizo las notificaciones push. Esta parte funciona bien. Cuando envío una notificación, también agrego una insignia al ícono de la aplicación. El problema es que cuando almuerce la aplicación, debería desaparecer nuevamente, pero no es así.Quitar insignia del ícono de la aplicación iOS

-(IBAction)Push{ 

    NSMutableDictionary *data = [NSMutableDictionary dictionary]; 

    [data setObject:@"Numfeud: Troels made a move!" forKey:@"alert"]; 

    [data setObject:[NSNumber numberWithInt:1] forKey:@"badge"]; 

    [data setObject:@"bar" forKey:@"foo"]; 

    [PFPush sendPushDataToChannelInBackground:@"GameChannel2" withData:data]; 
} 

En el application didFinishLaunchingWithOptions intento configurar insignia a 0 en esta forma:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

¿Cómo puedo borrar el icono de la insignia de la aplicación?

Respuesta

8

Probablemente, -application:didFinishLaunchingWithOptions: no se está llamando, porque su aplicación todavía se está ejecutando en segundo plano. Para eliminar el recuento de distintivos cuando la aplicación se inicia desde el fondo, deberás restablecer el número de la insignia en -applicationWillEnterForeground:, también.

+0

Gracias Fabian! Su respuesta fue exactamente lo que necesitaba :) thannnkkss – thar

+0

Son -applicationDidBecomeActive y -applicationWillEnterForeground: haciendo lo mismo menos o más? Al colocar el restablecimiento en -applicationDidBecomeActive. Funciona en ambas situaciones. – thar

+0

-applicaionDidBecomeActive: se invocará cuando regrese de una llamada telefónica, también. -applicationWillEnterForeground: es el método apropiado en su situación. –

192

Si su aplicación se activa de nuevo y todavía está en el fondo se debe restablecer el recuento de placas en -applicationDidBecomeActive: así:

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    application.applicationIconBadgeNumber = 0; 
} 

Si su aplicación sigue ejecutándose en segundo plano -application:didFinishLaunchingWithOptions: no se llamará.

+0

¡Gracias! Entonces hay algo allí que tiene sentido :) Funciona solo encuentra, solo lo reinicio en el método BecomeActive. ¿No puedo ver por qué debería tenerlo dos veces? – thar

+6

Restablecer una vez en '' -applicationDidBecomeActive: '' funcionará bien. Porque este método también se llamará cuando se llame a '' -application: didFinishLaunchingWithOptions: ''. Acepte mi respuesta :) – Mark

0

También puede usar estos códigos.

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    application.applicationIconBadgeNumber = 0; 
} 

o en un ViewController específica

- (void)awakeFromNib { 
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
} 
+1

Este código exacto es parte de la pregunta. – Brian

+1

¿Por qué alguien votó esta respuesta? –

1

Tal vez lo haga en applicationWillResignActive (en AppDelegate.m):

-(void)applicationWillResignActive:(UIApplication *)application{ 
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
} 

Esto ayudará a despejar badge si push llegado cuando la aplicación está siendo abierto. El usuario ve notification y lo borra cuando presiona Home Button (una o dos veces). También quedará claro si app es closed (desactive el usuario después de abrirlo).

Here se puede ver cuando se llama este método.

Cuestiones relacionadas