2016-07-19 10 views
9

Ich versuche, Daten von mehreren Speicherorten in der Firebase-Datenbank gleichzeitig zu löschen.Verwenden von UpdateChildValues ​​zum Löschen von Firebase

Der Firebase docs Zustand:

"The simplest way to delete data is to call removeValue on a reference to the location of that data. You can also delete by specifying nil as the value for another write operation such as setValue or updateChildValues. You can use this technique with updateChildValues to delete multiple children in a single API call."

Mein Code ist

let childUpdates = [path1 : nil, 
        path2 : nil, 
        path3 : nil, 
        path4 : nil] 

    ref.updateChildValues(childUpdates) 

Alle vier Wege Strings sind, aber ich erhalte eine Fehlermeldung:

"Type of expression is ambiguous without more context."

Ich würde davon ausgehen, dies geschieht wegen der Null-Werte, da, wenn ich nil durch etwas anderes (wie Int) ersetze, verschwindet der Fehler.

Wie kann updateChildValues ​​zum Löschen von Daten aus Firebase verwendet werden? Wir möchten, dass es ähnlich wie die Funktion removeValue() in Firebase funktioniert. Der Grund, warum wir dies bevorzugen würden, ist, weil es von mehreren Orten in einem Anruf entfernen kann.

Antwort

40

Also hier das Problem ist, dass

ref.updateChildValues(childUpdates) 

erfordert eine [Zeichenfolge: ANYOBJECT] Parameter updateChildValues ​​und ANYOBJECT! kann nicht null sein (das heißt können Sie verwenden ANYOBJECT nicht? was eine optionale ist, die Null sein könnte)

Sie können jedoch diese

let childUpdates = [path1 : NSNull(), 
        path2 : NSNull(), 
        path3 : NSNull(), 
        path4 : NSNull()] 

Weil ANYOBJECT tun! ist jetzt ein NSNull() - Objekt (nicht NULL), und Firebase weiß, dass NSNull ein Nullwert ist.

+0

Sie sparen meinen Tag –

+1

Vielen Dank! Dies muss unbedingt in der Firebase-Dokumentation enthalten sein, also frustrierend! – Crashalot

1

Ich denke, dieser Fehler stammt aus der ersten Zeile, die Sie angegeben haben. Sie müssen den Typ des Wörterbuchs angeben. So ist es

ändern
let childUpdates: [String : AnyObject?] = [path1: nil, path2: nil,...] 
+0

Leider funktioniert es nicht. Der erwartete Typ für das Wörterbuch ist [NSObject: AnyObject]. Wenn das Wörterbuch nicht diesen Typ aufweist, gibt die Funktion updateChildValues ​​einen Fehler aus. Wir haben versucht, die Pfade zu NSObjects zu ändern, aber es klagt immer noch mit dem Nil-Wert auf AnyObject ?. Es scheint, als ob wir keine Null-Werte einbringen können, aber sie sagen in ihren Dokumenten, dass wir so einen Weg finden können, den wir gerade nicht herausgefunden haben. –

+0

Ich denke, wenn Sie leere Zeichenfolgen verwenden "" "Firebase wird es entfernen. Versuch das. – rigdonmr

+1

Es ändert nur den Wert auf den Pfad zu einem leeren String –

Verwandte Themen