Ignorer une UILocalNotification déjà livrée?

Est-il possible de faire cela? UIApplication's ne semble pas returnner les notifications qui ont déjà été livrés au centre de notification de l'user, donc je pense que cela peut être par design, mais je ne trouve aucune preuve documentée de cela.

Quelqu'un sait?

Merci!

EDIT: Trouvé ceci:

Vous pouvez annuler une notification planifiée spécifique en appelant cancelLocalNotification: sur l'object application, et vous pouvez annuler toutes les notifications planifiées en appelant cancelAllLocalNotifications. Ces deux methods rejettent également par programme un actuellement

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

Toutefois, comment puis-je get une reference à une notification déjà envoyée, si scheduledLocalNotifications ne me donne pas de notifications déjà envoyées?

EDIT 2:

Voici ce que j'essaie de faire, après avoir enregistré quelques notifications:

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

Le problème est qu'une fois qu'ils sont livrés, ils ne sont plus dans 'scheduledLocalNotifications'.

Vous pouvez résoudre ce problème en ajoutant vos notifications nouvellement créées à votre propre NSMutableArray de notifications et en vérifiant ce tableau à la place de app.scheduledLocalNotifications . Quelque chose comme ça:

Ajoutez un NSMutableArray à votre file Viewcontrollers .h:

 NSMutableArray *currentNotifications; 

Initiez-le lors de l'initialisation de votre ViewController

 currentNotifications = [[NSMutableArray alloc] init]; 

Lorsque vous lancez une notification, ajoutez-la également à votre tableau:

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

Plus tard, lorsque vous souhaitez annuler cette notification, searchz-la dans votre tableau à la place. Retirez-le également de votre tableau:

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

J'ai cherché une réponse à cela aussi. Mon problème était que je voulais "nettoyer" toutes les notifications liées à l'application assis dans le centre de notification au cas où l'user ouvre l'application à partir de son icône de quai (puisque cela ne fait rien aux notifications précédemment envoyées …)

Heureusement, il semblerait que cancelAllNotifications n'annule pas seulement ceux programmés, mais TOUT. Je me suis donc contenté de conserver une reference des notifications planifiées existantes avant de les dynamiter, puis de les replanifier en conséquence:

 UIApplication *app = [UIApplication sharedApplication]; NSLog(@"\nScheduled notif count (prior) = %d", app.scheduledLocalNotifications.count); NSArray *scheduledNotifs = app.scheduledLocalNotifications; // hold on to a reference [[UIApplication sharedApplication] 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); 

Je ne sais pas si cela aide quelqu'un, mais cela a bien fonctionné pour ma situation.

Depuis iOS10, il existe maintenant un support natif pour cela si vous avez UNUserNotificationCenter vers UNUserNotificationCenter .

L'état des docs Apple:

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

Vous fournit une list des notifications de l'application qui sont toujours affichées dans le Centre de notifications.

func removeDeliveredNotifications(withIdentifiers: [Ssortingng])

Supprime les notifications spécifiées du Centre de notifications.

func removeAllDeliveredNotifications()

Supprime toutes les notifications de l'application du Centre de notifications.

Essayez ces liens:

Apple doc

Un tutoriel

Et la notification locale est enregistrée au centre de notification de périphérique, pas dans votre application.

Mais, si votre application est en cours d'exécution, et est une heure de notification, alors vous pouvez get des parameters de notification dans le jeu dans:

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

Vous pouvez le faire lorsque vous planifiez la notification si vous l'enregistrez également dans NSUserDefaults, en utilisant NSKeyedArchiver pour le convertir en NSData.

Pour le récupérer comme UILocalNotification, vous utilisez NSKeyedUnarchiver. Vous pouvez ensuite le supprimer à l'aide de la méthode cancelLocalNotification.

Entièrement expliqué ici (version rapide + lien vers la solution Obj-C originale)

Après avoir vu votre code mis à jour, il semble que vous êtes intéressé par l'annulation de toutes les notifications avec-dans pour la boucle, de sorte que vous pouvez utiliser –

  [[UIApplication sharedApplication] cancelAllLocalNotifications];