【发布时间】:2020-01-07 12:57:54
【问题描述】:
我正在尝试为文档的更改创建一个侦听器。当我更改 Firestore(服务器)中的数据时,它不会在 TableView(应用程序)中更新。 TableView 仅在我重新打开 App 或 ViewController 时更新。
我已经能够为查询快照设置此设置,但不能为文档快照设置。
谁能看看下面的代码,看看为什么它没有实时更新?
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
}
【问题讨论】:
-
您能描述一下您从代码中的日志记录中看到的内容吗?什么时候?当 vc 首次出现时,您是否看到“当前数据...”,然后在数据更新时再次出现?
-
你在观察者块中放了断点吗?
-
嗨 Lara,这是我的 tableView 的问题。当我通过 Firestore(服务器)进行更改时,侦听器会捕获数据并将其显示在打印代码中。它没有更新我的 TableView。只有当我返回 1 视图并租用视图时,它才会更新
-
抱歉,我在 ViewDidLoad 中创建了一个变量并在 cellForRowAt 中使用了它,所以我的更改永远不会被调用。我还没有测试它是否有效,但我确信它会。
-
其实这并没有什么不同。它仍然没有更新我的 TableView...
标签: swift firebase google-cloud-firestore listener