Eliminar una notificación local en particular
Estoy desarrollando una aplicación de alarma para iPhone basada en notificaciones locales.
Al eliminar una alarma, la notificación local relacionada debería cancelarse. Pero, ¿cómo puedo determinar exactamente qué objeto del conjunto de notificaciones locales se va a cancelar?
Conozco el [[UIApplication sharedApplication] cancelLocalNotification:notification]
método, pero ¿cómo puedo recibir esta 'notificación' para cancelarlo?
Puede guardar un valor único para la clave en la información de usuario de su notificación local. Obtenga todas las notificaciones locales, recorra la matriz y elimine la notificación en particular.
Codifique de la siguiente manera,
OBJ-C:
UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]];
if ([uid isEqualToString:uidtodelete])
{
//Cancelling local notification
[app cancelLocalNotification:oneEvent];
break;
}
}
RÁPIDO:
var app:UIApplication = UIApplication.sharedApplication()
for oneEvent in app.scheduledLocalNotifications {
var notification = oneEvent as UILocalNotification
let userInfoCurrent = notification.userInfo! as [String:AnyObject]
let uid = userInfoCurrent["uid"]! as String
if uid == uidtodelete {
//Cancelling local notification
app.cancelLocalNotification(notification)
break;
}
}
Notificación de usuario:
Si usa UserNotification (iOS 10+), simplemente siga estos pasos:
Al crear el contenido de UserNotification, agregue un identificador único
Elimine una notificación pendiente específica usando removePendingNotificationRequests(withIdentifiers:)
Elimine una notificación entregada específica usando removeDeliveredNotifications(withIdentifiers:)
Para obtener más información, UNUserNotificationCenter
Otra opción:
En primer lugar, cuando crea una notificación local, puede almacenarla en los valores predeterminados del usuario para uso futuro. El objeto de notificación local no se puede almacenar directamente en los valores predeterminados del usuario. Este objeto debe convertirse primero en un objeto NSData y luego NSData
puede almacenarse en User defaults
. A continuación se muestra el código para eso:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:localNotif];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:[NSString stringWithFormat:@"%d",indexPath.row]];
Después de haber almacenado y programado la notificación local, en el futuro, puede surgir el requisito de cancelar cualquier notificación que haya creado anteriormente, para poder recuperarla desde los valores predeterminados del usuario.
NSData *data= [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%d",UniqueKey]];
UILocalNotification *localNotif = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"Remove localnotification are %@", localNotif);
[[UIApplication sharedApplication] cancelLocalNotification:localNotif];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:[NSString stringWithFormat:@"%d",UniqueKey]];
Espero que esto ayude