如果我使用Firebase / Firestore查询返回值,如何返回TableView数据源值?

问题描述 投票:0回答:1

我了解Firestore是异步的。我在返回cellForRowAtnumberOfRowsInSection方法的值时遇到了一些麻烦。它不返回任何单元格/行,因为返回不在闭包之外,但是我无法将返回放置在闭包内。我该如何规避这个问题?

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    //Return the count how many workouts exist for each date.
    var counter = 0

    Firestore.firestore().collection("/users/\(self.userIdRef)/Days/\(dayIdArray[section])/Workouts/").getDocuments { (querySnapshot, error) in
        if error == nil && querySnapshot != nil {
            counter = querySnapshot?.count ?? 0
        }
    }
    return counter
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: self.cellID, for: indexPath)

    Firestore.firestore().collection("/users/\(self.userIdRef)/Days/\(dayIdArray[indexPath.section])/Workouts/").getDocuments { (querySnapshot, err) in

        if let err = err
        {
            print("Error getting documents: \(err)");
        }
        else
        {

            let firstValue = querySnapshot!.documents[indexPath.row]

            let myData = firstValue.data()
            let myDayRef = myData["workout"] as? String ?? ""
            cell.textLabel?.text = "\(myDayRef)"
            cell.textLabel?.textAlignment = .center
            cell.accessoryType = .disclosureIndicator
            cell.layer.backgroundColor = UIColor.clear.cgColor
            cell.textLabel?.textColor = UIColor(red: 0.1333, green: 0.2863, blue: 0.4, alpha: 1.0)
            cell.textLabel?.font = UIFont(name: "HelveticaNeue", size: 20)
        }
    }
    return cell
}
ios swift firebase google-cloud-firestore tableview
1个回答
0
投票

您在填充单元格后应重新加载tableView。像这样的东西:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: self.cellID, for: indexPath)

    Firestore.firestore().collection("/users/\(self.userIdRef)/Days/\(dayIdArray[indexPath.section])/Workouts/").getDocuments { (querySnapshot, err) in

        if let err = err {

            print("Error getting documents: \(err)");

        } else {

            let firstValue = querySnapshot!.documents[indexPath.row]
            let myData = firstValue.data()
            let myDayRef = myData["workout"] as? String ?? ""

            cell.textLabel?.text = "\(myDayRef)"
            cell.textLabel?.textAlignment = .center
            cell.accessoryType = .disclosureIndicator
            cell.layer.backgroundColor = UIColor.clear.cgColor
            cell.textLabel?.textColor = UIColor(red: 0.1333, green: 0.2863, blue: 0.4, alpha: 1.0)
            cell.textLabel?.font = UIFont(name: "HelveticaNeue", size: 20)

            self.tableView.reloadData()
        }
    }
    return cell
}
© www.soinside.com 2019 - 2024. All rights reserved.