Swift / Wie verwende ich dispatch_group mit mehreren aufgerufenen Webservices?

Ich benutzedispatch_group, um die Anforderungsfunktionen von Firebase aufzurufen und benachrichtigt zu werden, sobald die Anforderung abgeschlossen ist, um dann mit dem Ergebnis arbeiten zu können. In diesem Szenario habe ich gerade eine print-Anweisung eingegeben.

func loadStuff() {
    dispatch_group_enter(group)
        myFirebaseFunction() {
             dispatch_group_leave(group)
        }

    dispatch_group_notify(group, dispatch_get_main_queue()) {
        print("done")
    }
}

func myFirebaseFunction(completionHandler: () -> ()) {

    let usersRef = firebase.child("likes")
    usersRef.observeEventType(.Value, withBlock: { snapshot in

             if snapshot.exists() {
                   let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date",ascending: false)])

                   for item in sorted {

                       dict.append(item as! NSDictionary)
                   }
            }
            completionHandler()
   })   
}

Dieser Code funktioniert einwandfrei.Das Problem is dass zur Laufzeit Daten zur Firebase-Datenbank hinzugefügt werden. Deshalb muss ich @ verwendobserveEventType Anstatt vonobserveSingleEventOfType.

Dies bedeutet, dass es zur Laufzeit einen Beobachter gibt und, falls Daten zur Datenbank hinzugefügt wurden, der Block innerhalb vonmyFirebaseFunction wird erneut aufgerufen.

Wenn dies passiert, stürzt die App ab, weildispatch_group_leave(group) wurde ohne @ aufgerufdispatch_group_enter(group). Solange ich das richtig verstanden habe.

dispatch_group_enter(group)
    myFirebaseFunction() {
         dispatch_group_leave(group)      // crash here
    }

Wenn ich es in @ ändeobserveSingleEventOfType, kein Absturz, aber neu hinzugefügte Daten in Firebase werden nicht beobachtet.

Was ist die beste Vorgehensweise bei der Verwendung vondispatch_group mit mehrfach ausgeführten Web Services? Oder was muss ich tun, um mein Problem zu beheben? Hilfe wird sehr geschätzt.

PS Zur Zeit verwende ich Swift 2.3, aber ein Upgrade auf Swift 3 ist geplant. Es wäre also großartig, eine Antwort zu erhalten, die für beide geeignet ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage