我使用以下代码触发每日提醒:
let triggerDate = calendar.date(from: calendarComponents)
let triggerDaily = Calendar.current.dateComponents([.hour, .minute, .second], from: triggerDate!)
let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDaily, repeats: true)
let request = UNNotificationRequest(identifier: "daily-identifier", content: content, trigger: trigger)
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
//UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [identifier])
UNUserNotificationCenter.current().add(request, withCompletionHandler: { (error) in
if error != nil {
debugPrint("center.add(request, withCompletionHandler: { (error)")
} else {
debugPrint("no error?! at request added place")
}
})
上面的代码允许我设置标识符为
daily-identifier
的每日警报。由于我计划在代码中设置两个每日警报,因此我使用了上面的代码,并使用另一个标识符second-daily-identifier
来触发另一个具有不同小时/分钟组合的警报。我遇到的问题:
如果我使用代码
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
在添加请求之前,它会删除之前设置的警报(例如,如果我先添加“每日标识符”警报,那么当我添加“第二个每日标识符”时,它将删除“每日标识符”警报。
如果我使用其他方法
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [identifier])
专门删除我要设置的那个,那么它就很好用了。但是,我发现我再也无法停止它了。例如,如果我将标识符更改为“ third-identifier”,那么已经设置好的闹钟将永远在我的手机中。而且即使删除应用程序也无法删除它们。
我做错了什么?
最佳答案
要取消所有待处理的通知,您可以使用以下方法:
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)
}