Я создаю приложение со списком задач, задачи которого хранятся в базе данных Firebase. В настоящее время у меня есть одна задача в базе данных, которая отображается в UITableView. Когда приложение загружается в первый раз, оно показывает одну задачу, но затем каждый раз, когда перезагружается представление, задача добавляется дважды. Например, во второй раз отображаются 3 задания, затем 5 и т. Д.
Это функция, которая используется для создания TableViewCells:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let numberOfCells = taskController.getTodaysTasks().count
return numberOfCells
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let task = taskController.getTodaysTasks()[indexPath.row]
let cell = Bundle.main.loadNibNamed("TaskTableViewCell", owner: self, options: nil)?.first as! TaskTableViewCell
cell.taskTitle.text = task.title
cell.associatedTask = task
return cell
}
В TaskController:
func getTodaysTasks() -> [Task] {
var listToReturn = [Task]()
for task in taskList {
let isDueToday = (task.dueDate == dateController.getCurrentDate())
if isDueToday {
listToReturn.append(task)
}
}
return listToReturn
}
У меня также есть наблюдатель в базе данных, который обновляет представление таблицы при добавлении новой задачи:
func observeDatabase(_ tableToUpdate: UITableView) {
taskDatabase.observeSingleEvent(of: .childAdded) { (snapshot) in
let addedTask = self.createTaskFromSnapshot(snapshot)
self.taskList.append(addedTask)
tableToUpdate.reloadData()
}
}
func createTaskFromSnapshot(_ snapshot: DataSnapshot) -> Task {
let snapshotValue = snapshot.value as! Dictionary<String, String>
let taskTitle = snapshotValue["taskTitle"]!
return Task(title: taskTitle)
}
Единственный раз, когда задача добавляется в taskList, находится в методе наблюдаемых данных ().
Скриншоты дублирующих заданий:
База данных:
![enter image description here](https://i.stack.imgur.com/ewyP8.png)