如何實現本地通知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) **

暫時沒遇到問題。。

原問題鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,214評論 30 472
  • 父類實現深拷貝時,子類如何實現深度拷貝。父類沒有實現深拷貝時,子類如何實現深度拷貝。? 深拷貝同淺拷貝的區別:淺拷...
    JonesCxy閱讀 1,053評論 1 7
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 今日覺得沒什么可寫的,讓我高興的是今天先生帶我去了雅瑩的工廠店,第一次來到這里,還是有些新鮮感和興奮...
    歸途123閱讀 121評論 0 0
  • 因為? 就是因為, 沒有為什么。 為什么? 就是為什么, 沒有為什么。 知道? 就是知道, 沒有不知道。 果然? ...
    曦藝恪閱讀 51評論 0 1