¿Desestimar una UILocalNotification ya entregada?

¿Es posible hacer esto? UIApplication's scheduledLocalNotifications no parece devolver las notifications que ya se han UIApplication's centro de notifications del usuario, así que creo que esto puede ser por layout, pero no puedo encontrar ninguna evidencia documentada de esto.

¿Nadie sabe?

¡Gracias!

EDITAR: Encontrado esto:

Puede cancelar una notificación progtwigda específica llamando a cancelLocalNotification: en el object de la aplicación, y puede cancelar todas las notifications progtwigdas llamando a cancelAllLocalNotifications. Ambos methods también descartan programáticamente un

Aquí: http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html

Sin embargo, ¿cómo obtengo una reference a una notificación ya entregada, si scheduledLocalNotifications no me da notifications que ya han sido entregadas?

EDIT 2:

Esto es lo que estoy tratando de hacer, después de que haya registrado algunas notifications:

 UIApplication *app = [UIApplication shanetworkingApplication]; for (UILocalNotification *localNotification in app.scheduledLocalNotifications) { if (someCondition) { [app cancelLocalNotification:localNotification]; } } } 

El problema es que una vez que se entregan, ya no están en 'scheduledLocalNotifications'.

Puede resolver esto agregando las notifications recién creadas a su propio NSMutableArray de notifications y comprobar esa matriz en lugar de app.scheduledLocalNotifications . Algo como esto:

Agregue un NSMutableArray a su file .h de Viewcontrollers:

 NSMutableArray *currentNotifications; 

Iniciarlo al iniciar su ViewController

 currentNotifications = [[NSMutableArray alloc] init]; 

Al iniciar una notificación, también agréguela a su matriz:

 UILocalNotification *notification = [[UILocalNotification alloc] init]; ... [currentNotifications addObject:notification]; [[UIApplication shanetworkingApplication] presentLocalNotificationNow:notification]; 

Más tarde, cuando desee cancelar esa notificación, búsquela en su matriz en su lugar. También elimínelo de su matriz:

 for (UILocalNotification *notification in currentNotifications) { if (someCondition) { [[UIApplication shanetworkingApplication] cancelLocalNotification:notification]; [currentNotifications removeObject:notification]; } } 

He estado buscando una respuesta a esto también. Mi problema era que quería "limpiar" todas las notifications relacionadas con las aplicaciones que se encontraban en el centro de notifications, en caso de que el usuario abra la aplicación desde su ícono de la base (ya que no hace nada a las notifications anteriormente activadas …)

Afortunadamente, parece que cancelAllNotifications no solo cancela los progtwigdos, sino TODO. Así que simplemente me aferré a una reference de las notifications progtwigdas existentes antes de arruinarlas, y luego las reprogramé en consecuencia:

 UIApplication *app = [UIApplication shanetworkingApplication]; NSLog(@"\nScheduled notif count (prior) = %d", app.scheduledLocalNotifications.count); NSArray *scheduledNotifs = app.scheduledLocalNotifications; // hold on to a reference [[UIApplication shanetworkingApplication] cancelAllLocalNotifications]; // blast everything NSLog(@"\nScheduled notif count (post-wipeout) = %d", app.scheduledLocalNotifications.count); for (UILocalNotification *notif in scheduledNotifs) { [app scheduleLocalNotification:notif]; // put them back } NSLog(@"\nScheduled notif count (post-repopulation) = %d", app.scheduledLocalNotifications.count); 

No estoy seguro de si eso ayuda a nadie, pero esto funcionó muy bien para mi situación.

Desde iOS10 ahora hay soporte nativo para esto si ha realizado la transición a usar UNUserNotificationCenter .

El estado de los documentos de Apple:

func getDelivenetworkingNotifications(completionHandler: @escaping ([UNNotification]) -> Void)

Le proporciona una list de las notifications de la aplicación que aún se muestran en el Centro de notifications.

func removeDelivenetworkingNotifications(withIdentifiers: [String])

Elimina las notifications especificadas del Centro de notifications.

func removeAllDelivenetworkingNotifications()

Elimina todas las notifications de la aplicación del Centro de notifications.

Pruebe estos enlaces:

Apple doc

Algunos tutorial

Y la notificación local se está registrando en el centro de notifications del dispositivo, no en su aplicación.

Pero, si su aplicación se está ejecutando y es un time de notificación, puede get los parameters de notificación en el juego en:

 -(void) application:(UIApplication*)app didReceiveLocalNotification:(UILocalNotification*) notification { // local notification is geted } 

Puede hacerlo cuando programe la notificación si también la guarda en NSUserDefaults, utilizando NSKeyedArchiver para convertirla en NSData.

Para recuperarlo como UILocalNotification usa NSKeyedUnarchiver. Entonces puedes eliminarlo usando el método cancelLocalNotification.

Explicado completamente aquí (versión Swift + enlace a la solución original Obj-C)

Después de ver su código actualizado, parece que está interesado en cancelar todas las notifications con el bucle in-in, para que pueda usar –

  [[UIApplication shanetworkingApplication] cancelAllLocalNotifications];