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 2

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();

           })

        }