Использование UpdateChildValues ​​для удаления из Firebase

Я пытаюсь удалить данные из нескольких мест в базе данных Firebase одновременно.

Документы Firebase государство:

«Самый простой способ удаления данных - это вызвать removeValue для ссылки на местоположение этих данных. Вы также можете удалить, указав nil в качестве значения для другой операции записи, такой как setValue или updateChildValues. Вы можете использовать эту технику с updateChildValues ​​для удаления несколько детей в одном вызове API. "

Мой код

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

    ref.updateChildValues(childUpdates)

Все четыре пути являются строками, но я получаю сообщение об ошибке:

«Тип выражения неоднозначен без дополнительного контекста».

Я бы предположил, что это происходит из-за значений nil, поскольку, если я заменю nil чем-то другим (например, Int), ошибка исчезнет.

Как правильно использовать updateChildValues ​​для удаления данных из Firebase? Мы хотим, чтобы он работал аналогично функции removeValue () в Firebase. Причина, по которой мы бы предпочли это сделать, заключается в том, что он может удалить несколько мест за один вызов.

 Danh Huynh27 мая 2018 г., 03:45
Как они сказали, я думаю, что метод должен бытьupdateChildValues(values: [AnyHashable : Any?]) позволятьnil, Спасибо за вопрос!!! Я нашел ответ от @Jay

Ответы на вопрос(2)

Решение Вопроса

Так что проблема здесь в том, что

ref.updateChildValues(childUpdates)

для параметра updateChildValues ​​требуется параметр [String: AnyObject!] и AnyObject! не может быть нулем (т. е. вы не можете использовать AnyObject?, который является необязательным, который может быть нулем)

Тем не менее, вы можете сделать это

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

Потому что AnyObject! теперь является объектом NSNull () (не nil), и Firebase знает, что NSNull имеет значение nil.

 Patel Jigar14 июл. 2017 г., 13:47
ты спас мой день
 Crashalot02 нояб. 2017 г., 01:49
Спасибо! Это определенно должно быть в документации Firebase, так что расстраивает!

что эта ошибка исходит из первой строки, которую вы указали. Вам необходимо указать тип словаря. Так что измени его

let childUpdates: [String : AnyObject?] = [path1: nil, path2: nil,...]
 Olivia Watkins19 июл. 2016 г., 18:06
Он просто меняет значение в пути на пустую строку
 rigdonmr19 июл. 2016 г., 20:04
тогда я думаю, что вы должны пойти по пути удаления, а не пытаться делать то, что вы делаете.
 rigdonmr19 июл. 2016 г., 17:58
Я думаю, что если вы используете пустые строки"" Firebase удалит его. Попробуй это.
 Olivia Watkins19 июл. 2016 г., 17:57
К сожалению, это не работает. Ожидаемый тип словаря - [NSObject: AnyObject]. Если словарь не такого типа, функция updateChildValues ​​выдаст ошибку. Мы попытались изменить пути к NSObjects, но он по-прежнему жалуется на значение nil в AnyObject ?. Кажется, что мы не можем ввести нулевые значения, но они говорят в своих документах, что мы можем, поэтому может быть способ, которого мы просто не выяснили.

Ваш ответ на вопрос