UserNotifications cancel, swift3

Estoy trabajando en la aplicación donde el usuario puede configurar la hora para la notificación local diaria, luego tengo la opción de habilitar o deshabilitar estas notifications. Mi pregunta ¿Cómo puedo desactivar / cancelar la notificación ya configurada?

Aquí en una de estas IF debo cancelar la notificación

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if (indexPath as NSIndexPath).row == 1 && switchiBtn.isOn == false { return 0.0 } if (indexPath as NSIndexPath).row == 2 { if switchiBtn.isOn == false || dpVisible == true { return 0.0 } return 216.0 } if (indexPath as NSIndexPath).row == 3 { if switchiBtn.isOn == false || dpVisible == true { return 0.0 } return 44 } return 50.0 } 

Aquí hay funciones para la progtwigción y el button donde estoy configurando la notificación.

 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) } }) } @IBAction func setACTION(_ sender: AnyObject) { let hour = datePicker.calendar.component(.hour, from: datePicker.date) let minute = datePicker.calendar.component(.minute, from: datePicker.date) var dateComponents = DateComponents() dateComponents.hour = hour dateComponents.minute = minute print(dateComponents) scheduleNotif(date: dateComponents, completion: { success in if success { print("SUCCESS") } else { print("ERROR") } }) 

Gracias.

Para cancelar todas las notifications pendientes, puede usar esto:

 UNUserNotificationCenter.current().removeAllPendingNotificationRequests() 

Para cancelar notifications específicas,

 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) } 

La forma en que se identifica la misma UNNotification se basa en el identifier pasa al crear la UNNotificationRequest .

En su ejemplo anterior,

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

En realidad, ha codificado el identifier como "myNotif" . De esta manera, cuando quiera eliminar la notificación ya establecida, puede hacer esto:

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

Sin embargo, tenga en count que cuando codifica el identificador, cada vez que agrega una request a UNUserNotificationCenter la notificación se reemplaza.

Por ejemplo, si ha progtwigdo una request "myNotif" configurada en 1 minuto más tarde pero llama a otra function para progtwigr un "myNotif" a la 1 hora más tarde, será reemplazada. Por lo tanto, solo la última "myNotif" en una hora más tarde estará en pendingNotificationRequest .

Como se menciona aquí , puede cancelar todas las notifications con el siguiente código:

UIApplication.shanetworkingApplication().cancelAllLocalNotifications()