我有一个表视图,它将用作我的用户个人资料的第一个视图控制器。第一个单元格将显示用户名,然后用户将点击该单元格并查看其个人资料的详细信息。我遇到的问题是,当我将新的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),因为每个用户只能有一个配置文件,因此不需要追加多个用户。