我试图为文件更改创建一个侦听器。当我在Firestore(服务器)中更改数据时,它不会在TableView(应用程序)中更新。仅当我重新打开App或ViewController时,TableView才会更新。
我已经能够为查询快照设置此设置,但是不能为文档快照设置
。任何人都可以查看下面的代码以查看为什么它没有实时更新吗?
override func viewDidAppear(_ animated: Bool) {
var newDocIDString = newDocID ?? ""
detaliPartNumberListerner = firestore.collection(PARTINFO_REF).document(newDocIDString).addSnapshotListener { documentSnapshot, error in
guard let document = documentSnapshot else {
print("Error fetching document: \(error!)")
return
}
guard let data = document.data() else {
print("Document data was empty.")
return
}
print("Current data: \(data)")
self.partInfos.removeAll()
self.partInfos = PartInfo.parseData2(snapshot: documentSnapshot)
self.issueTableView.reloadData()
}
在我的PartInfo文件中
class func parseData2(snapshot: DocumentSnapshot?) -> [PartInfo] {
var partNumbers = [PartInfo]()
guard let snap = snapshot else { return partNumbers }
//for document in snap.documents {
// let data = document.data()
let area = snapshot?[AREA] as? String ?? "Not Known"
let count = snapshot?[COUNT] as? Int ?? 0
//let documentId = document.documentID
let documentId = snapshot?.documentID ?? ""
let newPartInfo = PartInfo(area: area, count: count, documentId: documentId)
partNumbers.append(newPartInfo)
return partNumbers
}
答案 0 :(得分:0)
UI工作必须始终在主线程上完成。因此,请执行以下操作,而不要使用第一个代码段中的最后一行:
DispatchQueue.main.async {
self.issueTableView.reloadData()
}
我认为这可能是解决您的问题的方法。 (有点晚了,我知道...)