web-dev-qa-db-ja.com

cancelAllLocalNotificationsがiOS10で機能しない

新しい通知を追加するときに、NotificationCenterから以前のすべてのローカル通知を削除したい。ただし、iOS9.0以前のバージョンでは機能しますが、iOS10では複数のローカル通知が発生します。したがって、cancelAllLocalNotificationsが通知をクリアしていないようです。

IOS10でコードが正常にコンパイルされます。

UIApplication.shared.cancelAllLocalNotifications()
13
technerd

IOS 10の場合、Swift 3.0

cancelAllLocalNotifications iOS10から非推奨。

@available(iOS, introduced: 4.0, deprecated: 10.0, message: "Use UserNotifications Framework's -[UNUserNotificationCenter removeAllPendingNotificationRequests]")
open func cancelAllLocalNotifications()

このインポートステートメントを追加する必要があります。

import UserNotifications

通知センターを取得します。そして、以下のような操作を行ってください。

let center = UNUserNotificationCenter.current()
center.removeAllDeliveredNotifications() // To remove all delivered notifications
center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled.

単一または複数の特定の通知を削除する場合は、以下の方法で実行できます。

center.removeDeliveredNotifications(withIdentifiers: ["your notification identifier"])

それが役に立てば幸い..!!

28
Wolverine

iOS 10の場合、Objective C

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center removeAllDeliveredNotifications];
[center removeAllPendingNotificationRequests];

Swift 4

UNUserNotificationCenter.current().removeAllPendingNotificationRequests()

すべての通知を一覧表示する場合:

func listPendingNotifications() {

    let notifCenter = UNUserNotificationCenter.current()
    notifCenter.getPendingNotificationRequests(completionHandler: { requests in
        for request in requests {
            print(request)
        }
    })
}
11

IOS 10の場合、この方法を使用してすべてのローカル通知を削除できます。私はちょうどテストしました、それは働いています。

    NSArray *arrayOfLocalNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications] ;
    for (UILocalNotification *localNotification in arrayOfLocalNotifications) {
        [[UIApplication sharedApplication] cancelLocalNotification:localNotification] ;
    }
0
Linh Nguyen