iOS Swift FIrebase: перемещение данных на другую firebase ref
У меня есть простое приложение для списка покупок, поддерживаемое / синхронизируемое firebase и элементами, добавленными несколькими пользователями. Я создал структуры данных для "GroceryItem"и " Users".
Одна из особенностей моего приложения заключается в том, что вы можете щелкнуть ячейку, и она поставит галочку рядом с элементом, а также изменит bool "завершено" на true.
Я пытаюсь сделать кнопку, где она будет, она переместит все отмеченные флажками элементы в отдельный список под названием "История".
Ниже приведен один из моих многочисленных неудач попытки к этому. Я также включил ошибку, которую дает мне XCode:
'элемент' (он же 'AnyObject') не конвертируется в 'FDataSnapshot'; вы хотели использовать 'as!- заставить опуститься?
@IBAction func itemsBoughtACTION(sender: AnyObject) {
ref.queryOrderedByChild("completed").observeEventType(.Value,
withBlock: { snapshot in
for item in snapshot.children {
var lastItem = GroceryItem(item)
}
})
}
EDIT: я просто хочу получить некоторые данные, уже хранящиеся в firebase, переместить их в другое место firebase и удалить оригинал.
1 ответ:
Процесс таков: запросите нужные вам данные, запишите их на другой узел, а затем удалите из исходного узла.
Ваш код выше не будет работать, так как он ожидает, что будет передан элемент управления из пользовательского интерфейса вместо FDataSnapshot. Если вы уже выполнили запрос и у вас есть набор данных, вы должны создать функцию, которая будет передана FDataSnapshot в качестве параметра и обработать его соответствующим образом.
Чтобы упростить ответ, предположим, что вам нужно получить снимок и процесс это когда кнопка нажата.
Есть много разных способов подойти к этому, вот один концептуальный вариант (непроверенный, поэтому не копируйте вставку)
//method is called when a button in the UI is clicked/tapped. @IBAction func itemsBoughtACTION(sender: AnyObject) { let rootRef = Firebase(url:"https://your-Firebase.firebaseio.com") let groceryRef = rootRef.childByAppendingPath("groceryLists") //get each child node of groceryRef where completed == true groceryRef.queryOrderedByChild("completed").queryEqualToValue(true) .observeEventType(.ChildAdded, withBlock: { snapshot in //set up a history node and write the snapshot.value to it // using the key as the node name and the value as the value. let historyNode = rootRef.childByAppendingPath("history") let thisHistoryNode = historyNode.childByAppendingPath(snapshot.key) thisHistoryNode.setValue(snapshot.value) //write to the new node //get a reference to the data we just read and remove it let nodeToRemove = groceryRef.childByAppendingPath(snapshot.key) nodeToRemove.removeValue(); }) }