0

J'essaie d'écrire du code qui permettra aux utilisateurs de définir des notifications locales personnalisées pour leur rappeler certaines tâches. J'utilise le cadre de notification d'utilisateur. Donc, fondamentalement, un utilisateur peut décider de mettre en place une notification qui lui rappellera d'acheter du savon chaque semaine ou de faire des souhaits d'anniversaire chaque année ou de vérifier quelque chose chaque mois (ce ne sont que des exemples).Notification locale dans l'intervalle de répétition rapide 3 sélectionné par les utilisateurs

Jusqu'à présent, j'ai été en mesure de définir une notification locale sans intervalle de répétition.

func scheduleNotif() { 
    let dateformatter = DateFormatter() 
    dateformatter.dateStyle = DateFormatter.Style.medium 
    dateformatter.timeStyle = DateFormatter.Style.short 
    let dateFromString = dateformatter.date(from: selectDateTextField.text!) 
    let fireDateOfNotification: Date = dateFromString! 

    //if notif are allowed 
    let content = UNMutableNotificationContent() 
    content.title = notifTitleTextField.text! 
    content.body = notifNoteTextView.text 
    content.sound = UNNotificationSound.default() 
    content.badge = UIApplication.shared.applicationIconBadgeNumber + 1 as NSNumber 

    let triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: fireDateOfNotification) 
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, 
               repeats: false) 
    //Schedule the Notification 
    let titleNospace = notifTitleTextField.text?.replacingOccurrences(of: " ", with: "") 
    let identifier = titleNospace 
    let request = UNNotificationRequest(identifier: identifier!, content: content, trigger: trigger) 
    self.center.add(request, withCompletionHandler: { (error) in 
     if let error = error { 
      print(error.localizedDescription) 
     } 
    }) 
} 

La date est sélectionnée à partir d'un sélecteur de dates. Maintenant, à partir d'un autre sélecteur, j'aimerais que l'utilisateur sélectionne l'intervalle de répétition (aucun, quotidien, hebdomadaire, mensuel, annuel et certains jours). Je ne sais pas comment je peux y arriver. Dois-je utiliser une instruction if else if? (ça ne me semble pas vraiment correct.) Existe-t-il un meilleur moyen d'y parvenir? Merci!

Répondre

0

Pour le moment, je l'ai fixé cette façon:

let dateformatter = DateFormatter() 
dateformatter.dateStyle = .medium 
dateformatter.timeStyle = .short 
let dateFromString = dateformatter.date(from: selectDateTextField.text!) 
let fireDateOfNotification: Date = dateFromString! 

var trigger: UNCalendarNotificationTrigger 
var triggerDate: DateComponents 
var repeatInterval = Bool() 

if repeatingInterval == "Hourly" { 
    triggerDate = Calendar.current.dateComponents([.minute], from: fireDateOfNotification) 
    repeatInterval = true 
} else if repeatingInterval == "Daily" { 
    triggerDate = Calendar.current.dateComponents([.hour, .minute], from: fireDateOfNotification) 
    repeatInterval = true 
} else if repeatingInterval == "Weekly" { 
    triggerDate = Calendar.current.dateComponents([.weekday, .hour, .minute], from: fireDateOfNotification) 
    repeatInterval = true 
} else if repeatingInterval == "Monthly" { 
    triggerDate = Calendar.current.dateComponents([.day, .hour, .minute], from: fireDateOfNotification) 
    repeatInterval = true 
} else if repeatingInterval == "Yearly" { 
    triggerDate = Calendar.current.dateComponents([.month, .day, .hour, .minute], from: fireDateOfNotification) 
    repeatInterval = true 
} else { 
    triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: fireDateOfNotification) 
    repeatInterval = false 
} 

trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: repeatInterval) 

//Schedule the Notification 
...... 

ont pas trouvé encore un moyen de le programmer pour intervalle différent (par exemple toutes les deux semaines, tous les deux jours, tous les six mois, etc.) . Je vais toujours y regarder. :)