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];
}
}
- Proporcione información al usuario cada vez que cree una notificación local (este es un par clave-valor).
- 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.