如何实现本地通知badgenumber自动增加-Swift

如何实现本地通知badgenumber自动增加

实现自动增加前提是非重复的本地通知。

几个要点:

1.在你自定义的的注册本地通知方法内,新的通知badgenumber需要通过当前存在的scheduled本地通知数量来确定。(通过后面renumberBadgesOfPendingNotifications方法也能重新分配该badgenumber)

let badgeNbr = UIApplication.sharedApplication().scheduledLocalNotifications?.count ?? 0
let nextBadgeNbr = badgeNbr + 1
yourLocalNotification.applicationBadgeNumber = nextBadgeNbr

2.当本地通知被你点击处理/进入APP的时候,你需要重新分配scheduled的本地通知

func renumberBadgesOfPendingNotifications() {
        UIApplication.sharedApplication().applicationIconBadgeNumber = 0

        let pendingNotifications = UIApplication.sharedApplication().scheduledLocalNotifications
        
        if (pendingNotifications?.count > 0) {
            
            UIApplication.sharedApplication().cancelAllLocalNotifications()
            
            print(UIApplication.sharedApplication().scheduledLocalNotifications)
            
            let badgeNbr = 0
            
            for noti in pendingNotifications! {
                let temp = badgeNbr + pendingNotifications!.indexOf(noti)! + 1
                noti.applicationIconBadgeNumber = temp
                
                // schedule 'again'
                UIApplication.sharedApplication().scheduleLocalNotification(noti)
            }
        }
    }

3.你可能会想到renumberBadgesOfPendingNotifications()假如程序内新增了本地通知,那么获得的notification并不是按照时间排序的,因而最好再加一个排序。

func renumberBadgesOfPendingNotifications() {

        UIApplication.sharedApplication().applicationIconBadgeNumber = 0
        
        let notifications = UIApplication.sharedApplication().scheduledLocalNotifications
        
        if (notifications?.count > 0) {
            
            let pendingNotifications = notifications?.sort({
                return $0.fireDate!.compare($1.fireDate!) == NSComparisonResult.OrderedDescending ? false : true
            })
            
            UIApplication.sharedApplication().cancelAllLocalNotifications()
         
            let badgeNbr = 0
            
            for noti in pendingNotifications! {
                let temp = badgeNbr + pendingNotifications!.indexOf(noti)! + 1
                noti.applicationIconBadgeNumber = temp
                
                // schedule 'again'
                UIApplication.sharedApplication().scheduleLocalNotification(noti)
            }
        }
    }

然后把上面方法加入
**func applicationDidBecomeActive(application: UIApplication) **

暂时没遇到问题。。

原问题链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,435评论 30 472
  • 父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。• 深拷贝同浅拷贝的区别:浅拷...
    JonesCxy阅读 4,796评论 1 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,188评论 19 139
  • 今日觉得没什么可写的,让我高兴的是今天先生带我去了雅莹的工厂店,第一次来到这里,还是有些新鲜感和兴奋...
    归途123阅读 1,126评论 0 0
  • 因为? 就是因为, 没有为什么。 为什么? 就是为什么, 没有为什么。 知道? 就是知道, 没有不知道。 果然? ...
    曦艺恪阅读 482评论 0 1

友情链接更多精彩内容