2016-07-19 261 views
9

Sto tentando di eliminare contemporaneamente i dati da diverse posizioni nel database Firebase.Utilizzo di UpdateChildValues ​​per eliminare da Firebase

Il Firebase docs Stato:

"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."

mio codice è

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

    ref.updateChildValues(childUpdates) 

Tutti e quattro i percorsi sono stringhe, ma ottengo un errore:

"Type of expression is ambiguous without more context."

mi piacerebbe pensare ciò si verifica a causa dei valori nulli, poiché se sostituisco nil con qualcos'altro (come un Int) l'errore scompare.

Qual è il modo corretto di utilizzare updateChildValues ​​per eliminare i dati da Firebase? Vogliamo che funzioni in modo simile alla funzione removeValue() in Firebase. Il motivo per cui preferiremmo farlo è che può rimuovere da più posti in un'unica chiamata.

risposta

40

Così il problema qui è che

ref.updateChildValues(childUpdates) 

richiede un: parametro per updateChildValues, e ANYOBJECT [String ANYOBJECT!]! non può essere un nullo (vale a dire non si può usare ANYOBJECT? che è un optional che potrebbe essere pari a zero)

Tuttavia, si può fare questo

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

Perché ANYOBJECT! ora è un oggetto NSNull() (non nullo) e Firebase sa che NSNull è un valore nullo.

+0

risparmi la mia giornata –

+1

Grazie mille! Questo sicuramente deve essere nella documentazione di Firebase, quindi frustrante! – Crashalot

1

Penso che questo errore provenga dalla prima riga che hai fornito. È necessario specificare il tipo di dizionario. Quindi cambiare per

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

Purtroppo non funziona. Il tipo previsto per il dizionario è [NSObject: AnyObject]. Se il dizionario non è quel tipo, la funzione updateChildValues ​​darà un errore. Abbiamo provato a cambiare i percorsi per NSObjects, ma si lamenta ancora con il valore nullo su AnyObject ?. Sembra che non siamo in grado di inserire valori nulli, ma dicono nei loro documenti che possiamo quindi ci può essere un modo che non abbiamo capito. –

+0

Penso che se usi le stringhe vuote "" "" Firebase lo rimuoverà. prova questo. – rigdonmr

+1

Cambia semplicemente il valore sul percorso di una stringa vuota –