Как определить, какой дочерний элемент Firebase выбран с помощью didSelectRowAt в табличном представлении со Swift? - PullRequest
0 голосов
/ 23 июня 2019

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

Я обнаружил функцию наблюдения, которая правильно отображает все childByAutoID для каждой строки, но показывает каждую строку, а не конкретную выбранную строку, и обновляет информацию в этом дочернем элементе.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print(tasks[indexPath.row].isFlagged)

    var task = self.tasks[indexPath.row]
    task.isFlagged.toggle()
    guard let uid = Auth.auth().currentUser?.uid else { return }

    var flag = ["isFlagged":false]

    if tasks[indexPath.row].isFlagged == true {
        flag = ["isFlagged":true]
    } else {
        flag = ["isFlagged":false]
    }
    Database.database().reference().child("users").child(uid).child("tasks").observeSingleEvent(of: .value, with: { (snapshot) in
        if let result = snapshot.children.allObjects as? [DataSnapshot] {
            for child in result {
                var theKey = child.key as! String
                print(theKey)
                Database.database().reference().child("users").child(uid).child("tasks").child(theKey).updateChildValues(flag)
            }
        }
    })

}

enter image description here

1 Ответ

2 голосов
/ 23 июня 2019

Когда вы читаете tasks, вы должны сохранить корневой ключ словаря, чтобы использовать его позже

enter image description here

Затем сделайте это внутри didSelectRowAt

let task = self.tasks[indexPath.row]
Database.database().reference().child("users").child(uid).child("tasks").child(task.key).updateChildValues(flag)

struct Task {
  let key:String
  .....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...