2017-07-18 8 views
0

Ich versuche, eine Funktion zu schreiben, um zu überprüfen, ob ich das Limit von 64 lokalen Benachrichtigungen erreicht habe. Es gibt einige Antworten, um sich mit UIlocalNotifications zu befassen, aber ich muss noch einen für NSlocalNotifications finden. Hier ist meine FunktionZähle ausstehende lokale Benachrichtigungen

 func notificationLimitreached() { 
    let center = UNUserNotificationCenter.current() 
    var limit = false 
    center.getPendingNotificationRequests(completionHandler: { requests in 
     print(requests.count) 
     if requests.count > 59 { 
      limit = true 
      print(limit) 
     } else { 
      limit = false 
     } 

    }) 
    print (limit) 

Problem der „Grenze“ Variable druckt wahr ist, wenn innerhalb des Verschlusses und dann initialisiert Wert false setzt nach der Schließung zu verlassen.

Etwas anderes habe ich ausprobiert.

- Setzen von globalen Variablen, wenn sie innerhalb Schließung wieder, sobald ich diesen Wert anders gelesen, wo sein Satz auf den ursprünglichen Wert

Antwort

3

Wie Sie sehen können Sie Asynchron-Logik konfrontiert sind:

Ihre Funktion druckt false zuerst, weil es innerhalb von getPendingNotificationRequests eine Verzögerung gibt.

diese Funktion versuchen und sehen, ob das funktioniert:

func isNotificationLimitreached(completed: @escaping (Bool)-> Void = {_ in }) { 
    let center = UNUserNotificationCenter.current() 
    center.getPendingNotificationRequests(completionHandler: { requests in 

     completed(requests.count > 59) 
    }) 
} 

Und Sie diese Funktion mit folgenden Code aufrufen können:

isNotificationLimitreached { isReached in 
     print(isReached) 
    } 
+0

upvoted, dann ist dies der richtige Weg, dies zu tun –

Verwandte Themen