Я думаю, что вы должны предпринять другой подход - обработать операцию удаления в обработчике завершения.Таким образом, вы будете уверены, что ваши данные будут согласованы.Потому что, что произойдет, если в вашем вызове Firebase произошла ошибка?Вы должны разобраться и с этим делом.Так что сделайте что-то вроде этого и посмотрите, что произойдет:
ref.child(songKey).removeValue { [weak self] error, _ in
if let error = error {
print("There was an error: ", error)
return
}
self?.songs.remove(at: indexPath.row)
self?.tableView.reloadData()
}
Я думаю, что здесь происходит то, что ваш код входит в бесконечный цикл - вы используете наблюдение на вашем playlists
, а затем удаляете.Таким образом, обработчик завершения observe
вызывается снова, а delete
вызывается снова.После того, как вы удалили элемент с этим индексом, индекс больше не может быть найден в вашем массиве.Так что просто получите свои плейлисты из базы данных, не наблюдая за дальнейшими изменениями.
В этом случае попробуйте использовать observeSingleEvent
.