iphone objective-c ios notifications

iphone - Cancelando una UILocalNotification específica



objective-c ios (3)

Tengo este código para notificaciones locales, y tengo una notificación de horario y clearNotification usando mi propio método. Estos son los códigos:

- (void)clearNotification { [[UIApplication sharedApplication] cancelAllLocalNotifications]; } - (void)scheduleNotification { [reminderText resignFirstResponder]; [[UIApplication sharedApplication] cancelAllLocalNotifications]; Class cls = NSClassFromString(@"UILocalNotification"); if (cls != nil) { UILocalNotification *notif = [[cls alloc] init]; notif.fireDate = [[datePicker date] dateByAddingTimeInterval:-30]; notif.timeZone = [NSTimeZone defaultTimeZone]; notif.alertBody = @"Evaluation Planner"; notif.alertAction = @"Details"; notif.soundName = UILocalNotificationDefaultSoundName; notif.applicationIconBadgeNumber = 1; NSDictionary *userDict = [NSDictionary dictionaryWithObject:reminderText.text forKey:kRemindMeNotificationDataKey]; notif.userInfo = userDict; [[UIApplication sharedApplication] scheduleLocalNotification:notif]; [notif release]; } }

Estos códigos funcionan bien, pero ahora quiero saber cómo sé qué objeto de notificación eliminará. Me gustaría crear una identificación para una notificación, es decir, una ID es equivalente a una notificación. Pero no sé en qué parte debería hacer eso. Además, necesito encontrar una manera de incluir todo esto en un plist.

Espero que alguien pueda ayudarme. Gracias.


NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications]; for (UILocalNotification *not in notifications) { NSString *dateString=[not.userInfo valueForKey:@"EndDate"]; if([dateString isEqualToString:@"CompareString"]) { [[UIApplication sharedApplication] cancelLocalNotification:not]; } }

  1. Proporcione información al usuario cada vez que cree una notificación local (este es un par clave-valor).
  2. Ir a través de notificaciones (contiene todas las notificaciones locales) y comparar el valor de la clave conocida. En el ejemplo anterior, estoy utilizando EndDate como la clave y CompareString como el valor.

Funciona bien conmigo.

Aclamaciones..


(void)cancelLocalNotification:(NSString*)notificationID { // UILocalNotification *cancelThisNotification = nil; // BOOL hasNotification = NO; for (int j =0;j<[[[UIApplication sharedApplication]scheduledLocalNotifications]count]; j++) { UILocalNotification *someNotification = [[[UIApplication sharedApplication]scheduledLocalNotifications]objectAtIndex:j]; if([[someNotification.userInfo objectForKey:@"drdid"] isEqualToString:notificationID]) { NSLog(@"id,notificationID(App) %@ %@ ",[someNotification.userInfo objectForKey:@"drdid"],notificationID); NSLog(@"canceled notifications %@",someNotification); [[UIApplication sharedApplication] cancelLocalNotification:someNotification]; } } }


Sugeriría usar la propiedad userInfo en UILocalNotification, como han mencionado otros. Una implementación más simple que la respuesta aceptada sería:

for(UILocalNotification* notification in [[UIApplication sharedApplication]scheduledLocalNotifications]) { if([[notification.userInfo objectForKey:@"notification_identifier"] isEqualToString:@"notification_001"]) { [[UIApplication sharedApplication] cancelLocalNotification:notification]; } }

Un ciclo for como este es mucho más simple. No estoy seguro de si es más o menos óptimo, pero ciertamente es más fácil de leer, y supongo que solo tiene algunas notificaciones para seguir.