2016-10-19 2 views
3

есть способ выполнить атомное удаление в Firebase?firebase - atom delete во многих местах

docs говорят

Вы также можете удалить, указав ноль в качестве значения для другой операции записи, такие как SetValue или updateChildValues ​​... Одновременные обновления сделаны таким образом, являются неделимыми: либо все обновления успеха или все обновления потерпеть неудачу.

но я не могу заставить его работать. Мой код ниже возвращает ошибку

Невозможно сохранить объект типа _SwiftValue at. Может хранить только объекты типа NSNumber, NSString, NSDictionary и NSArray

Есть ли что-то я здесь отсутствует или являются документы неправильно?

var topNodeRef = FIRDatabase.database().reference() 
var childUpdates: [String:Any?] = [:] 

childUpdates.updateValue(nil, forKey: "/owner") 
childUpdates.updateValue(nil, forKey: "/pet") 

topNodeRef.updateChildValues(childUpdates) 

ответ

2

в случае, если кто-то работает с той же проблемой, мне удалось это исправить с помощью NSNull() вместо nil

var topNodeRef = FIRDatabase.database().reference() 
var childUpdates: [String:Any] = [:] 

childUpdates["/owner"] = NSNull() 
childUpdates["/pet"] = NSNull() 

topNodeRef.updateChildValues(childUpdates) 
+0

. Это все еще работает на вас? Я получаю эту ошибку сейчас - '' InvalidFirebaseData ', reason:' (updateChildValues ​​:) Нестрочные ключи не допускаются в объекте по пути: ' – Trev14

0

Синтаксис кажется немного отличается от того, что я использую в этой рабочей сниппета:

var childUpdates: [String:Any?] = [:] 

childUpdates["-K9i1z2KPLzh9_OrAaQU"] = nil 
childUpdates["-K9i2kfteaS7tap93Gf6"] = nil 

ref?.updateChildValues(childUpdates) 
+0

Вы используете Firebase pod? если да, могу ли я узнать версию? код, который я запускаю, логически эквивалентен вашему, но мой заканчивается ошибкой – meowmeowmeow

+1

Я не указал какую-либо версию. Но я сомневаюсь, что версия имеет к этому какое-то отношение. Это похоже на синтаксис Swift для заполнения словаря. Когда я использовал ваш подход к заполнению словаря, я получил ту же ошибку, что и вы. Когда я изменил его на фрагмент, который я поделил, ошибка исчезла, и дети были удалены. Вы пробовали мой подход? Вы по-прежнему получаете ту же ошибку на одной линии с ней? –

+0

действительно странно, я не могу добавить значения в словарь, используя ваш подход. по какой-то причине значения не вставляются в словарь. попробуйте запустить это на детской площадке -> var dictio: [String: Any?] = [:] dictio.updateValue (nil, forKey: "test") dictio ["secondTest"] = nil – meowmeowmeow

Смежные вопросы