Firestore侦听器文档更改

时间:2019-09-04 15:33:46

标签: swift firebase google-cloud-firestore listener

我试图为文件更改创建一个侦听器。当我在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
}

1 个答案:

答案 0 :(得分:0)

UI工作必须始终在主线程上完成。因此,请执行以下操作,而不要使用第一个代码段中的最后一行:

DispatchQueue.main.async {
    self.issueTableView.reloadData()
}

我认为这可能是解决您的问题的方法。 (有点晚了,我知道...)