2016-06-13 1 views
5

Je l'ai lu dans quelques postes (comme celui-ci https://forums.developer.apple.com/thread/7598) que la mise enEffacer applicationIconBadgeNumber sans supprimer les notifications ne fonctionnent pas

application.applicationIconBadgeNumber = -1 

sur applicationDidBecomeActive ou applicationWillEnterForeground me permettrait d'effacer le numéro de badge sans supprimer les notifications le centre de notification. Quand je mets application.applicationIconBadgeNumber à un nombre négatif (comme -1) il efface toutes mes notifications du Notification Center. Existe-t-il un autre moyen de supprimer le numéro de badge sans supprimer le notifications?

+0

ce qui se passe lorsque vous définissez à une valeur positive comme 1 et 5 ont notif au centre de notif. – Shubhank

+0

C'est une très bonne question. En réalité, il n'y a aucun contrôle sur le nombre de notifications dans le centre de notification. Vous pouvez les compter manuellement, mais il y a des situations où vous obtiendriez l'erreur que vous venez de décrire où votre badge d'icône montre le numéro 1, mais vous en avez en réalité 5 dans le centre de notification. Cependant, il serait utile dans mon application juste pour effacer le numéro de badge d'icône et laisser les notifications dans le centre de notifications pour quand l'utilisateur en a besoin. –

+0

oui je ne voulais pas dire cela comme une solution. Je voulais juste savoir ce qui se passerait dans ce cas. Est-ce que les notifications seront effacées ou juste laissées pour durer 1? Aussi, puisque vous avez affaire à la notification push je crois - ne pouvez-vous pas simplement mettre le numéro de badge à 0 en eux? – Shubhank

Répondre

2

La définition du badge d'application à -1 indirectement avec une notification locale vide a fonctionné pour moi, mais c'est un piratage pour conserver les notifications dans la barre d'état tout en effaçant le nombre de badges d'application.

if(badgeCount == 0) { 
    //set application badge indirectly with UILocalNotification 
    UILocalNotification *ln = [[UILocalNotification alloc]init]; 
    ln.applicationIconBadgeNumber = -1; 
    [[UIApplication sharedApplication] presentLocalNotificationNow:ln]; 
} 
else { 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badgeCount]; 
} 

Version Swift

if badgeCount == 0 { 
    //set application badge indirectly with UILocalNotification 
    var ln = UILocalNotification() 
    ln.applicationIconBadgeNumber = -1 
    UIApplication.sharedApplication().presentLocalNotificationNow(ln) 
} 
else { 
    UIApplication.sharedApplication().applicationIconBadgeNumber = badgeCount 
} 

approche testée sur iOS 9 et 10.

+1

Merci d'avoir modifié votre réponse, Irfan. – Moritz

+0

Vous êtes les bienvenus. –

+0

Est-ce que quelqu'un a vérifié si cela fonctionne aussi sur iOS 11? – SpacyRicochet