2016-04-05 9 views
0

Ich mache derzeit eine App, die die Schritte zählt und mit Ziel überprüfen und lokalen Benachrichtigung freigeben, wenn erfüllt. Ich habe die lokale Benachrichtigung eingerichtet, aber ich möchte das in diesem Moment nur einmal auslösen. Ich habe dies durch dispatch_once_t arbeiten:iOS Local Notification Trigger Handhabung

if stepsData >= stepsGoalData { 
      let localNotification = UILocalNotification() 
      UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 
      localNotification.fireDate = NSDate() 
      localNotification.alertBody = "Acheived" 
      localNotification.soundName = UILocalNotificationDefaultSoundName 
    } 

Aber für den Fall, wenn der Benutzer die stepsGoalData erhöht, zur Zeit der Code nicht die Benachrichtigung auslösen. Kann mir bitte jemand eine Idee geben, mit diesem Fall umzugehen? Vielen Dank!

+0

Warum haben Sie die 'dispatch_once' hinzugefügt? Welches Problem hat es genau gelöst? – Wain

+0

Momentan ist mir aufgefallen, genau zwei Werte zu vergleichen, bei denen Pedometerdaten nicht möglich waren. Also musste ich> = verwenden, um die Daten zu vergleichen, und wenn ich nicht dispatch_once hinzufügte, erzeugte es fortwährend Benachrichtigungen und benutzte es nur einmal, was mein Ziel war. Ich denke, es könnte einen besseren Weg geben, um dies auch zu handhaben, aber auf der Suche konnte ich keinen finden :( – Alakh

+0

Sie müssen die letzte Bearbeitung auf Ihre Frage zurückstellen, da es jetzt keinen Sinn macht ... – Wain

Antwort

1

Also, Sie sollten wirklich nur die Prüfung ändern, ob sie benachrichtigt werden soll oder nicht, so dass sie nicht nur die Anzahl, sondern auch ein Flag berücksichtigt, um anzuzeigen, ob die Benachrichtigung erfolgt ist. Dies kann ein var neben Ihrer stepsGoalData als einfache Bool definiert werden.

Nun wäre Ihr Scheck sein:

if stepsData >= stepsGoalData && !hasNotified { 
    hasNotified = true 
    ... 

Und wenn Sie die stepsGoalData auf einen neuen Zielwert eingestellt Sie auch hasNotified = false gesetzt.

+0

Und entfernen der Versendezeilencode? – Alakh

+0

sicher, sonst wird es nicht wieder funktionieren, bis die App aus dem Speicher entfernt wird – Wain

+0

Ich habe meinen Code mit dem, was Sie empfohlen haben aktualisiert, wenn ich das richtig verstanden habe und was Sie hier zu erklären versucht habe ich bin Kontinuierliche Benachrichtigungen jetzt erhalten – Alakh