2010-07-12 27 views
13

estoy manejando notificaciones locales usando:notificación local de "didReceiveLocalNotification" llama dos veces

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif 

y para programar una notificación locales:

- (void)scheduleNotificationWithInterval:(int)minutesBefore { 
    UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 

    if (localNotif == nil) 
     return; 

    NSDate *fireDate = [NSDate date]; 
    localNotif.fireDate = [fireDate dateByAddingTimeInterval:minutesBefore*60]; 
    localNotif.timeZone = [NSTimeZone defaultTimeZone]; 
    localNotif.repeatInterval = kCFCalendarUnitMinute; 
    localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"LocalEvent notification in %i minutes.", nil),minutesBefore]; 
    localNotif.alertAction = NSLocalizedString(@"View Details", nil); 
    localNotif.applicationIconBadgeNumber = 1; 

    NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"This is dict, you can pass info for your notification",@"info",nil]; 
    localNotif.userInfo = infoDict; 

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 

    [localNotif release]; 
    NSLog(@"Event scheduled"); 
} 

Cuando recibo una notificación, didReceiveLocalNotification: se llama dos veces.

¿Estoy haciendo algo mal?

Por favor ayuda.

Gracias.

Respuesta

27

Creo que hay un error conocido en el simulador, que dispara el método de notificación de delegado dos veces. No debería suceder en el dispositivo, atado a XCode o no.

+7

no estoy seguro por qué, pero enfrento este problema (didReceiveLocalNotification varias veces) en el dispositivo también, así que mantengo un campo llamado estado y verifico manualmente el campo de estado para esa notificación si ya se ha activado – user1046037

14

yo también estaba enfrentando el mismo problema y la solución que me parece es que escribir el código en didReceiveLocalNotification

if (state == UIApplicationStateActive) { 
    NSLog(@"UIApplicationStateActive"); 
} 
else if(state == UIApplicationStateInactive){ 
    NSLog(@"UIApplicationStateInActive"); 
} 

aquí en estas condiciones que acabo de escribir el código que yo quiero que mi solicitud para hacer el notificación, en modo activo y en modo inactivo

1

Sospecho que la notificación se está reiniciando siempre y cuando esté en el mismo segundo todavía. Me fijo mediante el establecimiento de la fireDate a cero en el controlador:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:notification.alertAction message:notification.alertBody delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 

    notification.fireDate = nil; 

} 
1

que tenían la misma emitida. Fue provocado llamando a 'registerUserNotificationSettings' dos veces en 'didFinishLaunchingWithOptions' de AppDelegate. Sin embargo, simplemente eliminar la llamada duplicada no solucionó el problema todavía. Tuve que eliminar la aplicación y luego reconstruir. Solo entonces se solucionó el problema de la doble notificación local.

Cuestiones relacionadas