10
votes

Déjeter une uilocalnotification déjà livrée?

est-il possible de faire cela? UIAPPLication's's's's's's's's's's's's's ''s> SchedulédLocalNotifications CODE> Ne semble pas renvoyer les notifications qui ont déjà été livrées au centre de notification de l'utilisateur. Je pense donc que cela peut être par conception, mais je ne peux trouver aucun Preuve documentée de cela.

Quelqu'un sache? P>

Merci! P>

Edit: Trouvé ceci: P>

Vous pouvez annuler une notification planifiée spécifique en appelant Cancellocalnotification: sur l'objet d'application, et vous pouvez annuler Toutes les notifications planifiées en appelant CancelallLocalNotifications. Ces deux méthodes renvoient également programmatiquement un actuellement p> blockQuote>

ici: http: // développeur. Apple.com/library/mac/#documentation/networkingInternet/Conceptual/remotenotificationsPg/iphoneosclientImp/iphoneosclientImp.html P>

Cependant, comment puis-je faire référence à une notification déjà livrée, si Schedulédlocalnotiformations Code> ne me donne pas de notifications qui ont déjà été livrées? P>

Editer 2: P>

Voici ce que j'essaie de faire, après que je m'enregistre Certaines notifications: p>

UIApplication *app = [UIApplication sharedApplication];

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


2 commentaires

Pouvez-vous montrer du code, comment vous utilisez?


Bien sûr, juste une question mise à jour avec un code.


6 Réponses :


1
votes

Essayez ce liens:

Apple Doc P>

Quelques tutoriels

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

Mais, si votre application est en cours d'exécution, et est une heure de notification, vous pouvez obtenir des paramètres de notification dans le jeu dans: P>

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


1 commentaires

Yup, j'ai déjà lu celles-ci. Mais ce que je veux faire, c'est supprimer une notification spécifique à une heure ultérieure (arbitraire), pas seulement quand elle est reçue pour la première fois.



0
votes

Après avoir vu votre code mis à jour, il semble que vous souhaitiez annuler toutes les notifications avec la boucle pour boucle, vous pouvez donc utiliser -

 [[UIApplication sharedApplication] cancelAllLocalNotifications];


1 commentaires

Oh, oups. Dans mon code actuel, j'ai une condition autour de [application Cancellocalnotification: localnotification], de sorte que CancelallCalnotifications ne fera pas le tour. Je vais mettre à jour mon extrait de code pour correspondre à ceci.



9
votes

Vous pouvez résoudre ce problème en ajoutant vos notifications nouvellement créées à votre propre nsmutablearray code> de notifications et vérifiez que la matrice au lieu de app.scheduledlocalnotiformations code>. Quelque chose comme ceci:

Ajouter un NsmutableArraRay Code> à votre mode ViewContrôleurs .h Fichier: p>

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


2 commentaires

Cela fonctionnera tant que votre application reste résident. Dès qu'il démissionne, CurrentNotifications sera toast. J'aimerais aussi que la liste des notifications livrées, @elsurudo.


Cela ne fonctionne pas pour moi avec IOS 9.3.5, la notification reste dans le centre de notification



2
votes

Je cherche une réponse à cela aussi. Mon problème était que je voulais «nettoyer» toutes les notifications liées à une application assis dans le centre de notification au cas où l'utilisateur ouvre l'application de son icône de quai (car cela ne rien aux notifications précédemment tirées. ...)

Heureusement, il semblerait que Cancelallnotifications ne puisse pas simplement annuler ceux planifiés, mais tout. Donc, je me suis tout simplement contenue à une référence des notifications programmées existantes avant de les faire la bloquer, puis de les reprogrammer en conséquence: xxx

Je ne sais pas si cela aident quiconque mais cela a bien fonctionné pour mon situation.


0 commentaires

1
votes

Vous pouvez le faire lorsque vous planifiez la notification si vous l'enregistrez également dans NSUserDefaults, à l'aide de NskeyDarchiver pour le convertir en Nsdata.

Pour le récupérer comme Uilocalnotification que vous utilisez NskeyDunarchiver. Ensuite, vous êtes capable de le supprimer à l'aide de la méthode Cancellocalnotification.

pleinement expliqué ici (Swift version + lien vers une solution OBJ-C d'origine)


0 commentaires

5
votes

Depuis iOS10, il existe maintenant une prise en charge native si vous avez été transiguée à l'utilisation de UnusernotificationCenter .

L'état Documents Apple:

FUNC GETDELIVERNOTIFICATIONNOTITIFICATIONS (AchèvementHandler: @Escaping ([Innotification]) -> Void)

Vous fournit une liste des notifications de l'application qui sont toujours affichées dans le centre de notification.

Conversion de funcIVIVIVIVIVIVIVIVERS (avec présentation: [string])

supprime les notifications spécifiées du centre de notification.

func removealldeliveredNotifications ()

supprime toutes les notifications de l'application du centre de notification.


0 commentaires