Цикл по базе данных Firebase для построения списка таблиц в Swift - PullRequest
0 голосов
/ 11 декабря 2018

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

Итак, я настраиваю представления таблиц и определяю пустой клиентский массив

class ClientViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var clients = Array<Any>()

    @IBOutlet weak var tableView: UITableView!

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "clientsCell", for: indexPath as IndexPath)
        cell.textLabel?.text = clients[indexPath.row] as? String
        return cell
    }

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

Как только представление загружено, (что яЯ уверен, что проблема в этом) Я перебираю ссылку на базу данных и добавляю название компании в пустой массив клиентов

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        var ref: DatabaseReference!

        ref = Database.database().reference()

        ref.child("clients").observeSingleEvent(of: .value, with: { (snapshot) in

            for client in snapshot.children.allObjects as! [DataSnapshot] {
                let company = client.childSnapshot(forPath: "company").value
                self.clients.append(company ?? "No company name")
            }

        }) { (error) in
            print(error.localizedDescription)
        }
    }

Если я жестко закодирую массив клиентов, он прекрасно работает.При этом я думаю, что итерация происходит после генерации таблицы.Как я могу заставить это работать так, как будто мне это тоже нужно?

1 Ответ

0 голосов
/ 11 декабря 2018

После цикла for перезагрузите таблицу

for client in snapshot.children.allObjects as! [DataSnapshot] {
    let company = client.childSnapshot(forPath: "company").value
    self.clients.append(company ?? "No company name")
} 
self.tableView.reloadData()

Также избегайте типа Any, если в конечном итоге произойдет приведение к String

var clients = [String]()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...