2017-03-12 4 views
2

Je suis assez nouveau pour swift et j'essaie d'appeler plusieurs fonctions qui demandent une notification locale dans un UISwitch IBAction. Je veux envoyer une notification à une certaine date - chaque trimestre de l'année sur les mois 4, 7, 10, 1. Seule la fonction du quatrième trimestre est appelée. Comment puis-je appeler les quatre fonctions? Voici mon code:Pourquoi seule ma dernière fonction de notification locale est appelée?

// UISwitch pour les notifications trimestrielles

@IBAction func quarterlyFrequencyTapped(_ sender: UISwitch) { 

if quarterlyFrequency.isOn == true { 

    firstQuarter(); secondQuarter(); thirdQuarter(); fourthQuarter() 

    print("quarterly frequency is \(quarterlyFrequency.isOn)") 

} else { 

    removeQuarterlyNotification() 

    print("quaterly frequency is \(monthlyFrequency.isOn)") 

     } 

} 

// Fonctions pour les quatre trimestres

func firstQuarter() { 
    let firstQuarterContent = UNMutableNotificationContent() 
    firstQuarterContent.title = "First Quarter" 
    firstQuarterContent.subtitle = "Some string" 
    firstQuarterContent.body = "Some other string" 

    var firstQuarterDate = DateComponents() 
    firstQuarterDate.month = 3 
    firstQuarterDate.day = 11 
    firstQuarterDate.hour = 19 
    firstQuarterDate.minute = 20 

    let firstQuarterTrigger = UNCalendarNotificationTrigger(dateMatching: firstQuarterDate, repeats: true) 
    let firstQuarterRequestIdentifier = "Quarterly" 
    let firstQuarterRequest = UNNotificationRequest(identifier: firstQuarterRequestIdentifier, content: firstQuarterContent, trigger: firstQuarterTrigger) 
    UNUserNotificationCenter.current().add(firstQuarterRequest, withCompletionHandler: nil) 
} 

func secondQuarter() { 
    let secondQuarterContent = UNMutableNotificationContent() 
    secondQuarterContent.title = "Second Quarter" 
    secondQuarterContent.subtitle = "Some string" 
    secondQuarterContent.body = "Some other string" 

    var secondQuarterDate = DateComponents() 
    secondQuarterDate.month = 3 
    secondQuarterDate.day = 11 
    secondQuarterDate.hour = 19 
    secondQuarterDate.minute = 21 

    let secondQuarterTrigger = UNCalendarNotificationTrigger(dateMatching: secondQuarterDate, repeats: true) 
    let secondQuarterRequestIdentifier = "Quarterly" 
    let secondQuarterRequest = UNNotificationRequest(identifier: secondQuarterRequestIdentifier, content: secondQuarterContent, trigger: secondQuarterTrigger) 
    UNUserNotificationCenter.current().add(secondQuarterRequest, withCompletionHandler: nil) 
} 

func thirdQuarter() { 
    let thirdQuarterContent = UNMutableNotificationContent() 
    thirdQuarterContent.title = "Third Quarter" 
    thirdQuarterContent.subtitle = "Some string" 
    thirdQuarterContent.body = "Some other string" 

    var thirdQuarterDate = DateComponents() 
    thirdQuarterDate.month = 3 
    thirdQuarterDate.day = 11 
    thirdQuarterDate.hour = 19 
    thirdQuarterDate.minute = 22 

    let thirdQuarterTrigger = UNCalendarNotificationTrigger(dateMatching: thirdQuarterDate, repeats: true) 
    let thirdQuarterRequestIdentifier = "Quarterly" 
    let thirdQuarterRequest = UNNotificationRequest(identifier: thirdQuarterRequestIdentifier, content: thirdQuarterContent, trigger: thirdQuarterTrigger) 
    UNUserNotificationCenter.current().add(thirdQuarterRequest, withCompletionHandler: nil) 
} 

func fourthQuarter() { 
    let fourthQuarterContent = UNMutableNotificationContent() 
    fourthQuarterContent.title = "Fourth Quarter" 
    fourthQuarterContent.subtitle = "Some string" 
    fourthQuarterContent.body = "Some other string" 

    var fourthQuarterDate = DateComponents() 
    fourthQuarterDate.month = 3 
    fourthQuarterDate.day = 11 
    fourthQuarterDate.hour = 19 
    fourthQuarterDate.minute = 23 

    let fourthQuarterTrigger = UNCalendarNotificationTrigger(dateMatching: fourthQuarterDate, repeats: true) 
    //let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true) 
    let fourthQuarterRequestIdentifier = "Quarterly" 
    let fourthQuarterRequest = UNNotificationRequest(identifier: fourthQuarterRequestIdentifier, content: fourthQuarterContent, trigger: fourthQuarterTrigger) 
    UNUserNotificationCenter.current().add(fourthQuarterRequest, withCompletionHandler: nil) 
} 
+0

Comment savez-vous que seul le quatrième est appelé? Il n'y a rien de mal avec ce bloc de code. – TheValyreanGroup

+0

this 'firstQuarter(); deuxième quartier(); troisième quart(); fourthQuarter() 'exécute tous les 4 ... rien de mal avec. Peut-être vos fonctions ne fonctionnent-elles pas correctement – Honey

+0

Pour le tester, je configure la fonction de chaque trimestre à une minute d'intervalle et je lance le simulateur. Seule la quatrième notification s'exécute dans le simulateur. – nsd32

Répondre

3

Je pense que vous êtes sur iOS 10 et que vous utilisez UserNotifications cadre droit?

Très probablement vos identifier s ont la même et chacun sont la notification METTRE À JOUR précédente.

Votre correctif est d'utiliser différents identifiants pour chacun.

Pour plus voir cette moment pour la vidéo WWDC

mise à jour après votre édition: comme je l'ai dit ... toutes vos notifications ont "Quarterly" comme leur identifiant. Donnez-leur chacun un nom distinct.

+0

Cela a fonctionné, merci beaucoup! – nsd32

+0

@ nsd32 depuis que vous êtes nouveau ici. Une fois que vous obtenez une réponse que vous aimez, il est recommandé de 1. la revaloriser 2. cliquez sur le chèque pour [marquer comme réponse acceptée] (https://meta.stackexchange.com/questions/5234/how-does-accepting- an-answer-work) – Honey

+1

merci pour le conseil. Je viens de cliquer sur la coche, mais comme ma réputation est encore faible, l'upvote ne s'affiche pas, mais apparemment, il est toujours enregistré quelque part. Merci encore pour toute l'aide. – nsd32