2017-10-14 22 views
1

Comment puis-je exécuter par exemple des notifications locales? Dans UNUserNotificationCenter, il n'y a pas de fonction de répétition. Peut-être que vous utilisez NSTimer ou quelque chose comme ça?Répéter une action toutes les x minutes entre "A" un.m. et "B" p.m

Pourquoi mon code ne fonctionne pas comme je m'y attendais

let hours: [Int] = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24] 
    for hour in hours { 
     for minute in stride(from: 0, to: 60, by: 5){ 
      let content = UNMutableNotificationContent() 
      content.title = "Title" 
      content.body = "Body" 

      var dateComponents = DateComponents() 
      dateComponents.hour = hour 
      dateComponents.minute = minute 

      let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) 
      let request = UNNotificationRequest(identifier: "timerDone", content: content, trigger: trigger) 
      let center = UNUserNotificationCenter.current() 
      center.add(request) { (error : Error?) in 
       if let theError = error { 
        print(theError.localizedDescription) 
       } 
      } 

     } 
    } 
+0

Vous pouvez programmer une notification de répétition dans 'UNNotificationCenter' en utilisant un' UNTimeIntervalNotificationTrigger' mais vous ne pouvez pas spécifier qu'il cesse de répéter à un certain moment de la journée et reprendre à un autre moment. – Paulw11

+0

Peut-être que [Calendrier] (https://developer.apple.com/documentation/foundation/calendar) est également une option. – shallowThought

+0

Pourquoi ce code ne crée pas de notifications toutes les 5 minutes? J'ai pris en compte la réponse mise à jour, mais si je veux utiliser UNCalendarNotificationTrigger dans la boucle for in, cela ne crée pas de notifications. @ Paulw11 – Obarg

Répondre

2

Il existe une fonction de répétition.

De Apple's documentation:

let content = UNMutableNotificationContent() 
content.title = NSString.localizedUserNotificationString(forKey: 
      "Hello!", arguments: nil) 
content.body = NSString.localizedUserNotificationString(forKey: 
      "Hello_message_body", arguments: nil) 

// Deliver the notification in five seconds and repeat it 
content.sound = UNNotificationSound.default() 
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, 
     repeats: true) 

// Schedule the notification. 
let request = UNNotificationRequest(identifier: "60_seconds", content: content, trigger: trigger) 
let center = UNUserNotificationCenter.current() 
center.add(request, withCompletionHandler: nil) 

Edit:

Comme écrit dans la documentation, vous devez certainement avoir des autorisations utilisateur pour publier des notifications:

let center = UNUserNotificationCenter.current() 
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in 
    // Enable or disable features based on authorization 
} 

Résultat:

notification est affichée chaque minute:

+0

Pouvez-vous vérifier pourquoi le code me ne fonctionne pas? – Obarg

+0

"Ça ne marche pas" n'est pas une description très utile. J'ai essayé, fonctionne comme prévu ici. Voir la mise à jour – shallowThought

+0

Vous avez raison. Ça n'a pas marché comme je m'y attendais. Merci beaucoup – Obarg