2016-07-19 14 views
9

Próbuję jednocześnie usuwać dane z kilku lokalizacji z bazy danych Firebase.Używanie UpdateChildValues ​​do usunięcia z Firebase

Firebase docs stan:

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

Mój kod jest

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

    ref.updateChildValues(childUpdates) 

Wszystkie cztery ścieżki są struny, ale pojawia się błąd:

"Type of expression is ambiguous without more context."

bym przypuszczać to nastąpi ze względu na wartości zerowe, ponieważ jeśli zastąpię zero z czymkolwiek innym (takim jak Int), błąd znika.

Jaki jest poprawny sposób użycia updateChildValues ​​do usunięcia danych z Firebase? Chcemy, aby działał on w podobny sposób do funkcji removeValue() w Firebase. Powodem, dla którego chcielibyśmy to zrobić, jest możliwość usunięcia z wielu miejsc w jednym wywołaniu.

Odpowiedz

40

więc problem jest to, że

ref.updateChildValues(childUpdates) 

wymaga [String: AnyObject] parametr updateChildValues ​​i AnyObject! nie może być zero (to znaczy nie można używać AnyObject Które jest opcjonalny, który może być zerowa)

Jednak można to zrobić

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

ponieważ AnyObject! jest teraz obiektem NSNull() (nie zero), a Firebase wie, że NSNull jest wartością zerową.

+0

oszczędzasz mój dzień –

+1

Dziękuję bardzo! To zdecydowanie musi być w dokumentacji Firebase, więc frustrujące! – Crashalot

1

Myślę, że ten błąd pochodzi z pierwszej linii, którą podałeś. Musisz określić typ słownika. Więc go zmienić na

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

Niestety to nie działa. Oczekiwanym typem słownika jest [NSObject: AnyObject]. Jeśli słownik nie jest tego typu, funkcja updateChildValues ​​spowoduje błąd. Próbowaliśmy zmienić ścieżki do NSObjects, ale nadal narzeka z wartością zerową AnyObject ?. Wygląda na to, że nie jesteśmy w stanie odrzucić wartości zerowych, ale oni mówią w swoich dokumentach, że możemy, więc może być sposób, którego po prostu nie zrozumieliśmy. –

+0

Myślę, że jeśli użyjesz pustych ciągów '" "' Firebase usunie je. Spróbuj tego. – rigdonmr

+1

To po prostu zmienia wartość na ścieżce do pustego ciągu –

Powiązane problemy