首页 > 解决方案 > 当我第二次添加新文档时,SnapShotListener 正在尝试删除文档

问题描述

我仍然是一个菜鸟,我很难弄清楚这个错误。

我正在开发一个非常基础的健身房记录应用程序,它由 NavigationStack 内的两个 TableViewController 组成。我使用 Firebase/Firestore 作为我的后端,并且在添加或删除新数据时为每个 viewController 设置了 snapShotListeners。

我遇到的错误有点难以解释,但我会尽力...

我不知道为什么会发生这种情况,这让我很头疼。任何帮助或指导将不胜感激。再说一次,我对此很陌生,所以我的调试技能还没有达到标准。我很乐意包含代码,但我不确定我应该透露多少代码......请告诉我。

提前谢谢你!

编辑:

如果我的 VC 中只有两个文档(“C”和“D”)SecondViewController,当我进入该 VC 时,我diff.type == .added的 get 被执行 4 次而不是 2 次。即使只有 2 个文档,它也会打印 4 次“添加的文档”收藏。这是代码...

//MARK: - Load the Data
    func loadExercises() {

        feedback = self.exerciseCollection!.whereField("Workout", isEqualTo: selectedWorkout!.workout).order(by: "Timestamp", descending: false).addSnapshotListener({ (querySnapshot, err) in

            let group = DispatchGroup()

            guard let snapshot = querySnapshot else {return}

            snapshot.documentChanges.forEach { diff in
                
                if (diff.type == .added) {
                    self.exerciseArray.removeAll()

                    group.enter()
                    for document in querySnapshot!.documents {

                        let workoutData = document.data()
                        let exercise = workoutData["Exercise"] as! String

                        let newExercise = Exercise(Day: self.selectedWorkout!.day, Workout: self.selectedWorkout!.workout, Exercise: exercise, Key: document.reference)
                        self.exerciseArray.append(newExercise)
                        print("Document Added")
                    }
                    group.leave()
                    group.notify(queue: .main){
                        self.tableView.reloadData()
                    }
                }
                
                if (diff.type == .removed) {
                     print("Document Removed")

                     self.tableView.deleteRows(at: [self.indexToRemove!], with: .automatic)
                }
            }

            }
        )}

标签: iosswiftfirebaseuitableviewgoogle-cloud-firestore

解决方案


推荐阅读