使用firestore(firebase云数据库)获取重复数据

时间:2017-11-07 11:31:19

标签: ios swift firebase google-cloud-firestore

我正在使用具有设置限制的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 :Query

    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)
        }


    }

}

1 个答案:

答案 0 :(得分:0)

<强>解决

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