Проблема в том, что вы позволяете пользователю нажимать несколько раз, и это приводит к тому, что контроллер представления нажимается несколько раз. Вы должны предотвратить это.
Итак, одним из вариантов является создание одной глобальной переменной isObserving
, которая не позволяет наблюдать несколько раз.
var isObserving: Bool = false
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if !isObserving {
isObserving = true
...
ref.observeSingleEvent(of: .value, with: { snapshot in
...
self.isObserving = false
self.showChatControllerForUser(user)
})
}
}
Предложения по улучшению UX. Если наблюдение занимает некоторое время, вы должны сообщить пользователю, что есть что-то, что требует времени. Так, например, вы можете запустить и остановить загрузку UIActivityIndicatorView
. Также вы можете запретить пользователю выбирать ячейку несколько раз, работая с таблицей isUserInteractionEnabled
.
.