Получить дочерний ключ один за другим и отобразить в ярлыке Swift - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь найти ребенка в Firebase и напечатать его КАЖДОЕ на этикетке, но когда я получаю ключ, его печать выполняется одновременно. Я все еще учусь на ходу, вот что я попробовал:

func retrieve(){

        let userId = Auth.auth().currentUser?.uid

        let intakeRef = Database.database().reference().child("Users").child(userId!).child("Intake")

        intakeRef.observeSingleEvent(of: .value, with: { (snapshot) in

            if let intake = snapshot.value{

                self.ref.child("Attendance").child("Checkin").child(intake as! String).child(userId!).child("BM050-3-3-IMNPD").observe(.value, with: { (snapshot) in

                    for child in snapshot.children{
                        let key = (child as AnyObject).key as String
                        print(key)
                        label.text = key

                    }

                })

            }
        }) { (Error) in
            print("unable to retrieve name from nameRef")
        }

    }

Код, который я пробовал, как я сказал, печатает все одновременно. Но я хотел бы напечатать каждый на отдельной этикетке. Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 03 мая 2019

Вам, конечно, нужно создать tableViewController и связать его с TableView и назначить вашей ячейке собственный идентификатор, но это хорошее представление о том, что вам нужно сделать в вашем собственном tableViewController:

class tableViewController: UITableViewController {


    var dataArray = [String]()
    var ref = Database.database().reference() //You didn't include your delcaration of ref in your code, so don't use this, just use the one you were already using.

    override func viewDidLoad() {
        super.viewDidLoad()
        retrieve()
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataArray.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        let data = dataArray[indexPath.row]
        cell.textLabel?.text = data

        return cell
    }




    func retrieve(){

       let userId = Auth.auth().currentUser?.uid

        let intakeRef = Database.database().reference().child("Users").child(userId!).child("Intake")

        intakeRef.observeSingleEvent(of: .value, with: { (snapshot) in

            if let intake = snapshot.value{

                self.ref.child("Attendance").child("Checkin").child(intake as! String).child(userId!).child("BM050-3-3-IMNPD").observe(.value, with: { (snapshot) in

                    for child in snapshot.children{
                        let key = (child as AnyObject).key as String
                       self.dataArray.append(key)

                    }

                })
               self.tableView.reloadData()
            }
        }) { (Error) in
            print("unable to retrieve name from nameRef")
        }

    }


}

Опять же, вам нужно создать свой собственный UItableView, связать его с UITableViewController, назначить свой собственный идентификатор повторного использования ячейки и убедиться, что в cellForRowAt указан правильный идентификатор повторного использования, и вам нужно будет замените переменную ref в предоставленном мной коде на ref, которую вам нужно использовать.

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