Конкретные данные получают Firebase Database - PullRequest
0 голосов
/ 22 октября 2018
    var ref = Database.database().reference()
    ref.observe(.value, with: { (snapshot: DataSnapshot) in

        self.items.removeAll()

        for chipItem: DataSnapshot in snapshot.children.allObjects as! [DataSnapshot]{

            let chipId: String = chipItem.key

            let titles: DataSnapshot = chipItem.childSnapshot(forPath: "titles")




            for device in titles.children.allObjects as! [DataSnapshot]{

                print("Got device: ", device)

                let value: NSDictionary = device.value as! NSDictionary

                let deviceTitle: String = value["title"] as! String
                let deviceId: String = value["id"] as! String

                let deviceState: Bool = chipItem.childSnapshot(forPath: "states/\(deviceId)").value as! Bool

                let newDevice = Device()

                newDevice.title = deviceTitle
                newDevice.chipId = chipId
                newDevice.state = deviceState
                newDevice.id = deviceId

                self.items.append(newDevice)
            }

        }


        self.tableView.reloadData()

Я не хочу рисовать все данные.Я хочу нарисовать определенные данные для chipId (например, 123,2).chipId примет ссылочные данные.пример: chipId = 123, chipId = 2
примечание: ссылка на ChipId при создании таблицы

введите описание изображения здесь

1 Ответ

0 голосов
/ 22 октября 2018

Привет, Берк, и добро пожаловать в StackOverflow.Чтобы получить определенные элементы в Firebase без получения всех данных, вам необходимо изменить ссылку на базу данных.Думайте о ссылке как о местоположении в вашем дереве JSON.Если вы хотите конкретный элемент, вы должны указать это местоположение в вашей ссылке при его создании.Например.Если бы у меня были пользователи, но я хотел указать только одного пользователя, я мог бы сделать это:

    let userRef = Database.database().reference().child("Users").child(user.uid)

Неясно, на что указывает ваша ссылка выше, но, возможно, добавив

.child("123").child("states").child("002")

на вашу ссылку вы получите то, что вам нужно.

Edit:

var ref = Database.database().reference().child("123")

получит весь 123 узел, так что вы можете удалить итератор внутри наблюдения и получить доступ к дочерним узлам с помощью

let titles = snapshot.childSnapshot(forPath: "titles")

Кодирование Пример извлечения данных:

private func getData() {
    let ref = Database.database().reference().child("akillipriz-stechome").child("123")
    ref.observeSingleEvent(of: .value, with: {(_ snapshot: DataSnapshot) -> Void in
        for snapshots in snapshot.children.allObjects as! [DataSnapshot] {
            guard let dict = snapshots.value as? [String: AnyObject] else { return }

            if let states = dict["states"] as? [String: AnyObject] {
                print("STATES: \(states)")
            } else {
                print("States Location is Empty or Nil")
            }

            if let titles = dict["titles"] as? [String: AnyObject]  {
                print("TITLES: \(titles)")
            } else {
                print("States Location is Empty or Nil")
            }
        }
    })
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...