在触发之前删除/避免本地通知

时间:2019-03-03 06:13:31

标签: ios swift unusernotificationcenter

我正在安排一个本地通知,该通知在每个工作日重复一次(每个星期三说一些示例)

    let content = UNMutableNotificationContent()
    content.title = notificationTitle
    content.body = notificationBody

    let currentCalendar = NSCalendar.current
        let dateComponents = currentCalendar.dateComponents([.weekOfMonth], from: startDate)
        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
        let request = UNNotificationRequest(identifier: ViewController.kEveryWeekIdentifier, content: content, trigger: trigger)

        UNUserNotificationCenter.current().add(request) { (error) in

        }

上面的代码可以正常工作,但是我想在触发/传递之前删除特定的通知。
可以像这样删除吗? 还是至少不可以在特定日期触发通知?

1 个答案:

答案 0 :(得分:0)

您可以通过两种方式删除通知:

1)通过标识符

创建通知时,请设置其标识符。您可以通过将该标识符传递给以下方法来删除通知:

UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: arrayOfNotificationIds)

2)按日期

另一种选择是整理所有计划的通知并按特定日期过滤它们,然后将在特定日期计划的通知传递给上述方法以删除它们。

您可以按以下方式获取所有计划的通知:

UNUserNotificationCenter.current().getPendingNotificationRequests(completionHandler: {requests -> () in }

您可能还会发现这很有用:从计划的通知中提取触发器(及其过滤日期):

1)使用上述方法检索通知

2)获取通知触发器。

let currentTrigger = currentRequest.trigger as! UNCalendarNotificationTrigger

3)从触发器中获取日期分量

let dateComponents = currentTrigger.dateComponents

4)使用合适的dateComponents

过滤掉!