2017-09-09 5 views
0

Dans mon application iOS, j'essaie de créer un localNotification pour avertir l'utilisateur 15 minutes avant le début de l'événement. Cependant je suis coincé. J'utilise CoreData pour stocker des données. J'ai un objet Appointment qui peut être créé. Un attribut date est associé à un objet Appointment. Je suis vraiment coincé avec ça. Je ne sais pas comment configurer le timeInterval et le reste du processus de notification.Création de UILocalNotifications avec l'attribut CoreData

Je ne sais pas comment configurer le timeInterval à partir du moment où le Appointment a été créé jusqu'à 15 minutes avant le début.

Voici une partie de mon code:

func scheduleNotifications() { 
    let content = UNMutableNotificationContent() 
    guard let client = client, let name = client.name, let formula = formula, let date = formula.date else { return } 
    content.title = "BookMe" 
    content.subtitle = "" 
    content.body = "Your appointment with \(name) will begin soon." 
    content.badge = 1 

    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: ??, repeats: false) 

Modifié: C'est ce que je tire, mais rien.

let date = formula.date 
let fireDate = Calendar.current.date(byAdding: DateComponents(minute: -15), to: date as Date) 
guard let timeInterval = fireDate?.timeIntervalSince(Date()) else { return } 

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterval, repeats: false) 

let request = UNNotificationRequest(identifier: self.timerUserNotificationIdentifier, content: content, trigger: trigger) 

UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) 
+0

Demandez-vous comment créer une date de 15 minutes avant une date? – Abizern

+0

@Abizern essentiellement oui –

Répondre

0

Si je comprends bien, vous cherchez à trouver un intervalle de temps entre maintenant et 15 minutes avant une date afin que vous puissiez tirer une notification 15 minutes avant cette date.

Voici un exemple rapide, je frappais dans une aire de jeux

// Create a date in the future - this is what you get from your own data object and I'm creating it here just so I have a date. 
let scheduledDate = Calendar.current.date(from: DateComponents(year: 2017, month: 09, day: 22, hour: 22))! 

// Create a date 15 minutes earlier than your shcheduled date, this is when you want your notification to fire 
let fireDate = Calendar.current.date(byAdding: DateComponents(minute: -15), to: scheduledDate)! 

// Then just work out the time interval between the fire date and now to get the time interval 
let timeInterval = fireDate.timeIntervalSince(Date()) 

Excuse la force déballant des dates créées, ce sont parce que c'est un exemple, vous devriez plutôt pas utiliser des points d'exclamation et gérer les erreurs grâce.

ajouter édité

UNTimeIntervalNotificationTrigger, que vous essayez d'utiliser nécessite un TimeInterval entre now et le temps que vous souhaitez tirer la notification. Un TimeInterval est un double qui représente un nombre de secondes. Dans certains cas, comme celui-ci, il représente un délai, le nombre de secondes entre maintenant et le moment où vous souhaitez déclencher la notification. Dans d'autres cas, il représente une date par le nombre de secondes à partir d'une date fixe. Cette date fixe est soit timeIntervalSince1970 - "L'intervalle entre l'objet date et 00:00:00 UTC le 1er janvier 1970." Quel est ce que vous utilisez pour les horodatages UNIX ou timeIntervalSinceReferenceDate - "L'intervalle entre l'objet date et 00:00:00 UTC le 1er janvier 2001." Quoi que vous fassiez, résistez à la tentation de modifier les dates en ajoutant ou en supprimant directement des nombres de secondes, utilisez plutôt les composants DateComponents.

+0

Je l'ai fait mais mis en œuvre les dates que j'ai et la notification ne tire pas –

+0

Nous ne pouvons pas voir ce que vous avez fait c'est donc difficile d'aider. – Abizern

+0

Cochez ci-dessus pour le code modifié –