ios - 当我第二次添加新文档时,SnapShotListener 正在尝试删除文档
问题描述
我仍然是一个菜鸟,我很难弄清楚这个错误。
我正在开发一个非常基础的健身房记录应用程序,它由 NavigationStack 内的两个 TableViewController 组成。我使用 Firebase/Firestore 作为我的后端,并且在添加或删除新数据时为每个 viewController 设置了 snapShotListeners。
我遇到的错误有点难以解释,但我会尽力...
- 首先,我在
firstTableViewController
名为“A”和“B”的文件中创建了两个新文档,然后在每个文件中,我在secondViewController
名为“C”和“D”的文件中创建了另外两个文件。 - 接下来,我删除了我的文档“A”和“B”
firstTableViewController
,这也自动删除了两对文档“C”和“D”。所有这些更改都在 Firestore 后端得到观察和反映,所以没有问题,一切都按照它应该的方式工作。 - 在这一点上,我回到了第一方,有两个空
TableViewControllers
。所以现在我尝试通过重新创建我之前创建的两个文档来做完全相同的事情,使用完全相同的名称“A”和“B”,我还尝试重新创建文档“C” ”和“D”分别在“A”和“B”中。然而这一次,当我尝试在文档“B”中重新创建文档“D”时,由于某种原因,我在我的diff.type == .removed
内部执行,我得到了代码......snapShotListener
secondViewController
Unexpectedly found nil while unwrapping an Optional value
我不知道为什么会发生这种情况,这让我很头疼。任何帮助或指导将不胜感激。再说一次,我对此很陌生,所以我的调试技能还没有达到标准。我很乐意包含代码,但我不确定我应该透露多少代码......请告诉我。
提前谢谢你!
编辑:
如果我的 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)
}
}
}
)}
解决方案
推荐阅读
- python-3.x - 无法在 SSH 连接的客户端中运行 SQL
- go - 有没有办法访问结构字段之类的接口或使用相同字段更改类型(不同的结构)
- sql - 从 SQL Azure RLS 数据库通过链接服务器查询数据
- css - 为什么我的 CSS 过渡在开始之前要等待另一个完成?
- java - 这段代码是否意味着我创建了 10000 个线程来运行该函数?
- django - 在任意字段等价上预取无关模型
- java - Java有Hashable、Hasher之类的东西吗?
- python-3.x - 自动植物收获算法
- ios - 自定义 UIView addTarget 或 RxCocoa 订阅中的 UIButton 不起作用
- javascript - 覆盖 Prettier 配置