Ich benutze Firebase mit App im Offline-Modus gestartet, wenn ich untergeordnete Werte von einigen Knoten abonnieren den Rückruf von observe*(_:,withBlock:)
nicht feuert (weder für die erste Werte noch Änderungen). Abonnements für direkte Werte (kinderlos) funktioniert gut. Werfen Sie einen Blick auf ein Snippet:Firebase gestartet im Offline-Modus, nicht feuern osberve * für Kind Werte
let database = FIRDatabase.database()
database.reference().keepSynced(true)
let databaseRef = database.reference()
database.goOffline()
databaseRef.child("user").setValue("user1")
let userKey = databaseRef.child("usr").childByAutoId().key
let userValues = ["uid": "uid",
"name" : "name",
"surname" : "surname"]
databaseRef.child("/usr/\(userKey)/").setValue(userValues)
//1
databaseRef.child("user").observeSingleEventOfType(.Value, withBlock:{ snap in
print("works")
})
//2
databaseRef.child("usr").observeSingleEventOfType(.Value, withBlock:{ snap in
print("doesnt work")
})
//3
databaseRef.child("usr/\(userKey)/uid").observeSingleEventOfType(.Value, withBlock:{ snap in
print("works")
})`
Abonnements 1 & 2 funktioniert gut, aber 2 Abo wird nicht ausgelöst, bis mindestens einmal Datenbank online gehen. Von dem Moment an, in dem die Datenbank mit der Fernbedienung synchronisiert wird, kann ich offline gehen und alles funktioniert wie es sollte. Wer weiß, wie man mit diesem Problem umgeht?
danke für die Antwort. Wenn das der Fall ist, warum wird Ereignis für Fall 1 & 2 im Ausschnitt ausgelöst, wo ich einen einzelnen Wert anstelle eines Kindknotens referenziere? – mprostak
Nummer 3 wird ausgelöst, weil Sie den Wert dieses Standorts in Ihrem eigenen Code festgelegt haben. Daher hat der Firebase-Cache einen Wert für diesen Knoten. Ich denke das gleiche gilt für deinen ersten Test, bin mir aber nicht sicher. –
Für jeden Fall setze ich einen Wert - 1: Wert "user1" für den Knoten "user", für die Sekunde setze ich child node mit Werten für den Knoten "usr", für 3. setze ich einen einzelnen Wert in child Knoten für Knoten "usr". Versteh immer noch nicht, warum für den 2. nicht gefeuert wird. Bitte beachten Sie, dass wenn ich mindestens einmal online gehe, ich im Offline-Modus ohne Probleme arbeiten kann, diese 3 Test Brände normalerweise - wieder, wenn ich App lösche und offline neu starte, probleme. – mprostak