Eliminar una notificación local en particular

Resuelto Yogi asked hace 13 años • 14 respuestas

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?

Yogi avatar Jun 14 '11 14:06 Yogi
Aceptado

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:

  1. Al crear el contenido de UserNotification, agregue un identificador único

  2. Elimine una notificación pendiente específica usando removePendingNotificationRequests(withIdentifiers:)

  3. Elimine una notificación entregada específica usando removeDeliveredNotifications(withIdentifiers:)

Para obtener más información, UNUserNotificationCenter

KingofBliss avatar Jun 14 '2011 09:06 KingofBliss

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 NSDatapuede 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

jigneshbrahmkhatri avatar Jun 27 '2011 15:06 jigneshbrahmkhatri