Progtwigr la notificación con Swift 3 para un set de dates

Tengo una matriz que contiene mis dates. Quiero progtwigr notifications para esos días a las 6:30 a.m.

Seguí el tutorial de la aplicación que ayuda a progtwigr la notificación a partir de la input de un datepicker, que es genial, pero estoy un poco inseguro sobre cómo llamar a mi function para progtwigr la notificación solo para los días indicados.

Entonces, mi pregunta es ¿cómo y dónde llamar a la function?

  • los días son días consecutivos
  • ¿Puedo darle a la function una date de inicio y repetirla con la cantidad de elementos en la matriz?

A continuación se muestra mi function:

func scheduleNotification(at date: Date) { let calendar = Calendar(identifier: .gregorian) let components = calendar.dateComponents(in: .current, from: date) let newComponents = DateComponents(calendar: calendar, timeZone: .current, month: components.month, day: components.day, hour: 6, minute: 30) let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false) let content = UNMutableNotificationContent() content.title = "Advent Calendar" content.body = "Just a reminder to open your present!" content.sound = UNNotificationSound.default() let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger) UNUserNotificationCenter.current().removeAllPendingNotificationRequests() UNUserNotificationCenter.current().add(request) {(error) in if let error = error { print("Uh oh! We had an error: \(error)") } } } 

Bien, entonces, después de consultar con un desarrollador @gklka , he decidido usar un bucle simple para repetir 24 veces) y pasa el índice a la propiedad del día de la function, donde preconfiguré la hora, minuto, año y mes así:

 func scheduleNotification(day: Int) { var date = DateComponents() date.year = 2016 date.month = 11 date.day = day date.hour = 6 date.minute = 30 let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: false) } 

y el bucle for:

 for index in 1...24 { scheduleNotification(day: index) } 

Como tenía todo configurado int AppDelegate, llamo a la function en didFinishLaunchingWithOptions

Actualización el 1 de diciembre.

Así que dejé todo tal como está pero no se ha notificado ninguna notificación por la mañana. </s> Miré en mi código para averiguar por qué. Hubo 2 problemas.

  1. Tenía una línea de código dentro de mi function que eliminaba cualquier configuration de notificación previa mientras se repetía a través de mi ciclo, por lo que tenía la línea de código a continuación comentada, pero las cosas aún no funcionaban como se esperaba. UNUserNotificationCenter.current().removeAllPendingNotificationRequests()

  2. Descubrí que programé mi notificación con el mismo requestIdentifier, que básicamente me dejó con solo una notificación para el último día. Simplemente agregué el índice al final de mi variable de ID personalizada con una interpolación de cadena, así: let requestId = "textNotification\(day)"