2017-01-05 4 views
1

Je n'arrive pas à planifier les notifications locales dans une boucle for qui planifie plusieurs notifications. Par exemple, la fonction prend dans une variable appelée repetition qui est un tableau de jours de la semaine, dans le but de planifier une notification chaque jour de la semaine dans le tableau. Le problème est que les notifications sont déclenchées lorsqu'il n'y a qu'un seul jour de semaine et qu'une seule notification planifiée. Aucune notification n'est déclenchée lorsqu'il y a plus d'un élément dans le tableau. Voici la fonction complète pour plus de clarté:Planification des notifications locales à l'intérieur de la boucle for

func scheduleNotification(at date: Date, every repetition: [String], withName name: String, id: String) { 

    print("Scheduling notifications for the following days: \(repetition) \n \n") 

    var components = DateComponents() 
    let calendar = Calendar.current 

    let hour = calendar.component(.hour, from: date) 
    let minutes = calendar.component(.minute, from: date) 

    components.hour = hour 
    components.minute = minutes 

    for rep in repetition { 
     switch rep { 
      case "Sunday" : components.weekday = 1 
      case "Monday" : components.weekday = 2 
      case "Tuesday" : components.weekday = 3 
      case "Wednesday": components.weekday = 4 
      case "Thursday" : components.weekday = 5 
      case "Friday" : components.weekday = 6 
      case "Saturday" : components.weekday = 7 

     default: 
      break 
     } 

     let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: true) 

     let content = UNMutableNotificationContent() 
     content.title = name 
     content.body = "Let's go!" 
     content.sound = UNNotificationSound.default() 

     let request = UNNotificationRequest(identifier: id, content: content, trigger: trigger) 

     print("Added notification request for \(request.trigger?.description) \n") 

     UNUserNotificationCenter.current().add(request) {(error) in 
      if let error = error { 
       print("Uh oh! We had an error: \(error)") 
      } 
     } 
    } 
} 

résultats du journal d'impression

Ce bouton déclenche une notification à l'heure prévue:

Working

Cela ne se déclenche pas une notification au heure prévue:

Not working

Répondre

2

Correction du problème ... Je n'avais pas réalisé que les notifications nécessitaient des identifiants différents. Dans la méthode ci-dessus, j'utilisais le même identifiant pour toutes les notifications planifiées du même type. Pour résoudre ce problème, je ne fait qu'ajouter de la semaine de chaque jour à l'identifiant de notification:

let request = UNNotificationRequest(identifier: id + String(describing: components.weekday), content: content, trigger: trigger) 

Tout semble fonctionner pour maintenant.

+0

J'avais regardé autour pendant des siècles essayant de comprendre quel était mon problème, parce que je faisais exactement la même chose. Tu as sauvé mon monde !!! – bhakti123