清除applicationIconBadgeNumber而不删除无效的通知

Mar*_*ida 7 badge ios swift

我已经阅读了几个帖子(比如这个https://forums.developer.apple.com/thread/7598)

    application.applicationIconBadgeNumber = -1
Run Code Online (Sandbox Code Playgroud)

on applicationDidBecomeActiveapplicationWillEnterForeground允许我清除徽章编号而不从通知中心删除通知.当我设置application.applicationIconBadgeNumber为负数(如-1)时,它会清除我的所有通知Notification Center.有没有其他方法可以清除徽章编号而不删除notifications

Man*_*sha 7

UIApplication.sharedApplication.applicationIconBadgeNumber = -1;
Run Code Online (Sandbox Code Playgroud)

我已经在 iOS 12.2 中对其进行了测试,并且通过远程通知对我来说效果很好。

它通过在通知中心保留收到的远程通知来清除徽章计数。

代码片段供参考:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    UIApplication.sharedApplication.applicationIconBadgeNumber = -1;
}
Run Code Online (Sandbox Code Playgroud)


Irf*_*Gul 5

使用空的本地通知将应用程序徽章间接设置为 -1 对我有用,但在清除应用程序徽章计数的同时将通知保留在托盘中是一种技巧。

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];
}
Run Code Online (Sandbox Code Playgroud)

迅捷版

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

在 iOS 9 和 10 上测试的方法。