14

すでに設定されている通知を無効/キャンセルするにはどうすればよいですか?

これが私のスケジュール機能です。

func scheduleNotif(date: DateComponents, completion: @escaping (_ Success: Bool) -> ()) {

    let notif = UNMutableNotificationContent()

    notif.title = "Your quote for today is ready."
    notif.body = "Click here to open an app."

    let dateTrigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)
    let request = UNNotificationRequest(identifier: "myNotif", content: notif, trigger: dateTrigger)

    UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in

        if error != nil {
            print(error)
            completion(false)
        } else {
            completion(true)
        }
    })
}
4

3 に答える 3

40

保留中のすべての通知をキャンセルするには、これを使用できます。

UNUserNotificationCenter.current().removeAllPendingNotificationRequests()

特定の通知をキャンセルするには、

UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in
   var identifiers: [String] = []
   for notification:UNNotificationRequest in notificationRequests {
       if notification.identifier == "identifierCancel" {
          identifiers.append(notification.identifier)
       }
   }
   UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: identifiers)
}
于 2016-11-12T14:00:00.400 に答える
9

同じ ように、 を作成したときに渡さUNNotificationれた に基づいて識別されます。identifierUNNotificationRequest

上記の例では、

let request = UNNotificationRequest(identifier: "myNotif", content: notif, trigger: dateTrigger)

実際には を にハードコーディングしidentifierました"myNotif"。このようにして、すでに設定されている通知を削除したいときはいつでも、これを行うことができます:

UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: "myNotif")

requestただし、識別子をハードコーディングすると、通知に aを追加するたびにUNUserNotificationCenter実際に置き換えられることに注意してください。

たとえば、"myNotif" request1 分後にセットをスケジュールしたが、別の関数を呼び出し"myNotif"て 1 時間後にセットをスケジュールした場合、そのセットは置き換えられます。"myNotif"したがって、1 時間後の最新のものだけがpendingNotificationRequest.

于 2016-11-12T14:05:22.860 に答える
-5

ここで述べたように、次のコードを使用してすべての通知をキャンセルできます。

UIApplication.sharedApplication().cancelAllLocalNotifications()

于 2016-11-12T13:46:47.723 に答える