将SnapshotListener添加到Tableview

时间:2018-08-08 03:27:56

标签: uitableview firebase google-cloud-firestore swift4

我有一个表视图,它将用作我的用户个人资料的第一个视图控制器。第一个单元格将显示用户名,然后用户将点击该单元格并查看其个人资料的详细信息。我遇到的问题是,当我将新的User对象添加到数组以在单元格中显示用户时,将添加新用户,而不是在编辑配置文件后使用新的用户名更新单元格。这是下面的表格视图代码

import UIKit
import FirebaseFirestore

class OwnersProfileController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var reference: Firestore!
    var namesArray = [User]()
    var document: [DocumentSnapshot] = []

       @IBOutlet weak var ownersProfile: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        reference = Firestore.firestore()


    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        loadData()
    }


    func loadData() {
        reference.collection("User").getDocuments { (querySnapshot, error) in
            if let error = error {
                print("\(error.localizedDescription)")
            } else {

                if let querySnapshot = querySnapshot {

                    for document in querySnapshot.documents {

                        let data = document.data()

                        let firstName = data["firstName"] as? String ?? ""
                        let lastName = data["lastName"] as? String ?? ""
                        let email = data["email"] as? String ?? ""
                        let address = data["address"] as? String ?? ""
                        let cellPhone = data["cellPhone"] as? String ?? ""
                        let city = data["city"] as? String ?? ""
                        let state = data["state"] as? String ?? ""
                        let county = data["county"] as? String ?? ""

                        let newUser = User(firstName: firstName, lastName: lastName, email: email, cellPhone: cellPhone, address: address, city: city, state: state, county: county)
                        self.namesArray.append(newUser)
                    }
                    DispatchQueue.main.async {
                        self.ownersProfile.reloadData()
                        }
                }
            }
        }
    }




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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier = "OwnersProfileCell"

        guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? OwnersProfileCell else {
            fatalError("not an instance of OwnersProfileCell")
        }

        let name = namesArray[indexPath.row]
        let fullName = "\(name.firstName) \(name.lastName))"

        cell.ownersProfileLabel.text = fullName

        return cell
 }

正如您在我的代码中看到的那样,我初始化了一个User对象,但我认为只显示我想要的名字和姓氏不必如此。我有一个个人资料详细信息页面,其中有一个快照侦听器,用于观察我所做的编辑并相应地更新标签。它的工作原理完全符合我的需要,并且我想为表视图使用快照,以便我可以在单元格中显示全名,并且在配置文件更改时它也会更改。我已经阅读并观看了有关教程和有关它的stackoverflow问题,但没有一个对我有意义,可以继续实施它。

如何添加快照侦听器,以便仅更新显示名称的一个单元格?我知道我需要摆脱append(newUser),因为每个用户只能有一个配置文件,因此不需要追加多个用户。

0 个答案:

没有答案