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

我已经阅读了几个帖子(比如这一个 https://forums.developer.apple.com/thread/7598)那个设置
application.applicationIconBadgeNumber = -1

在applicationDidBecomeActive或applicationWillEnterForeground上,我可以清除徽章编号,而无需从通知中心删除通知.当我将application.applicationIconBadgeNumber设置为负数(如-1)时,它会清除通知中心的所有通知.是否有其他方法可以在不删除通知的情况下清除徽章编号?

解决方法

使用空的本地通知间接将应用程序徽章设置为-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];
}

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
}

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...