Firestore-在Tableview中显示数据

时间:2018-05-05 18:29:31

标签: ios swift uitableview google-cloud-firestore

我正在尝试将我的Firestore数据显示到我的Tableview中,但我似乎无法将其显示出来。

func loadData() {
    db.collection("sourses").getDocuments() {
        snapshot, error in
        if let error = error {
            print("\(error.localizedDescription)")
        } else {
            self.sourseArray = snapshot!.documents.flatMap({Sourse(dictionary: $0.data())})
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }
}

起初我尝试了下面的代码,没有错误,但在tableview中没有加载任何内容。

func loadData() {
        db.collection("sourses").getDocuments() {
            snapshot, error in
            if let error = error {
                print("\(error.localizedDescription)")
            } else {
                for document in snapshot!.documents {

                    let data = document.data()
                    let name = data["name"] as? String ?? ""
                    let content = data["content"] as? String ?? ""
                    let timeStamp = data["timeStamp"] as? Date 

                    let newSourse = (name:name, content:content, timeStamp: timeStamp)
                    self.sourseArray.append(newSourse)
                }
            }
        }
    }

经过一些研究(从Firestore - Append to tableView when view is loaded读取)我尝试了下面的代码,但是我得到了错误"无法转换类型'(名称:String,content:String,timeStamp:日期)&#39?;预期的论证类型' Sourse'"所以我尝试了从所有代码中删除的日期,我仍然无法让它工作。

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

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return sourseArray.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "SourseTableViewCell", for: indexPath)

        let sourse = sourseArray[indexPath.row]

        cell.textLabel?.text = "\(sourse.name)"
        cell.detailTextLabel?.text = "\(sourse.content)"

        return cell
    }

这是我的numberOfRows / CellForRow,以确保它不是tableview本身。我还仔细检查了"小区标识符"我的故事板。

{{1}}

1 个答案:

答案 0 :(得分:1)

您需要在解析tableView后重新加载Snapshot。强制解开你的Snapshot

也不是一个好主意
.getDocuments { (snapshot, error) in

    if let error = error {

        print(error.localizedDescription)

    } else {

        if let snapshot = snapshot {

            for document in snapshot.documents {

                let data = document.data()
                let name = data["name"] as? String ?? ""
                let content = data["content"] as? String ?? ""
                let timeStamp = data["timeStamp"] as? Date ?? Date()
                let newSourse = Sourse(name:name, content:content, timeStamp: timeStamp)
                self.sourseArray.append(newSourse)
            }
            self.tableView.reloadData()
        }
    }