OStack程序员社区-中国程序员成长平台

标题: ios - 使用firestore(firebase云数据库)获取重复数据时 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:13
标题: ios - 使用firestore(firebase云数据库)获取重复数据时

我正在使用具有设置限制的 firestore 数据在 tableview 中加载更多功能,同时我滚动 tableview 获取 addListener 方法调用,我检查了两次,得到重复记录。

在下面的代码中,我已经打印了我得到的快照。每次滚动时,它都会按快照 ID 及其数据打印。

仍然得到重复的数据。 firebase 控制台是否有任何其他设置?

这是我的代码,但代码中没有任何错误,它来自 firebase。

func getTasks(){

    // self.tableViewData.reloadDataWithLoader(true)
    let userID = HelperFunction.helper.FetchFromUserDefault(name: kUID)
    let taskRef = Firestore.firestore().collection("tasks")
    let query uery

    if (self.snapLastkey == "") {
        self.arrayTask = []
        self.arrayKeys = []
        self.arraySelectedTask = []
        query = taskRef.whereField(kUUID, isEqualTo: userID).whereField(kIsCompleted, isEqualTo: false).limit(to: kLimit)
    }else{
        query = taskRef.whereField(kUUID, isEqualTo: userID).whereField(kIsCompleted, isEqualTo: false).limit(to: kLimit).start(afterDocument: self.snapLastDocument!)
    }

    query.addSnapshotListener { (snapshot, error) in

        if(error == nil){

            guard let snapshot = snapshot else {
                // The query snapshot has error.
                runOnMainThread {
                    // self.tableViewData.reloadData(withPlaceholderString: "No task found.", with: APP_BLACK_COLOR)
                }
                print("Error retrieving products: \(error.debugDescription)")
                return
            }

            guard let lastSnapshot = snapshot.documents.last else {
                // The collection is empty.
                runOnMainThread {
                    self.tableViewData.reloadData(withPlaceholderString: "No task found.", with: APP_BLACK_COLOR)
                    if(self.snapLastkey != "") {
                        self.tableViewData.reloadDataWithLoader(false)
                        self.footerw.endRefreshingWithNoMoreData()

                    }
                }

                return
            }

           // self.snapLastDocument = lastSnapshot

            if (self.arrayTask.count==0) {
                self.arrayTask = []
                self.arrayKeys = []
                self.arraySelectedTask = []
            }




            snapshot.documentChanges.forEach({ (document) in
                print("\(document.document.documentID) => \(document.document.data())")
                let json = JSON(document.document.data())
                self.arrayTask.append(Task.init(json: json))
                self.arraySelectedTask.append(false)
                self.arrayKeys.append(document.document.documentID)
                self.snapLastkey = document.document.documentID as String
                self.snapLastDocument = document.document

            })

            print("\n\n\n\n\n--------arr print---------\n\n")
            for  i in 0..<self.arrayTask.count
            {
                let task = self.arrayTask[i]
                print("arr task Title:",task.title)
            }


            self.tableViewData.reloadData()
            if(self.arrayTask.count==0){
                self.snapLastkey = ""
                self.tableViewData.reloadData(withPlaceholderString: "No task found.", with: APP_BLACK_COLOR)
            }else{
                if Int(snapshot.documents.count) < kLimit{
                    self.snapLastkey = ""
                    self.footerw.endRefreshingWithNoMoreData()
                }
                else{
                    self.footerw.endRefreshing()
                }

            }
            print(self.arrayTask)

        }else{
            print(error?.localizedDescription ?? "")
            self.tableViewData.reloadData(withPlaceholderString: "Try again.", with: APP_BLACK_COLOR)
        }


    }

}



Best Answer-推荐答案


已解决

它只是索引问题。我在日志中找到了它。所以在日志中我得到了在 firebase 索引部分创建索引的链接。我已经创建了需要的新索引,我的数据即将到来正是我想要的。

关于ios - 使用firestore(firebase云数据库)获取重复数据时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47156847/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4