Проблема с методом count при использовании его в работе с MongoDB
прохожу Видео курс: Приложение на основе UITableView (Урок 17: Refactor Code to Use DB).
Сразу скажу весь функционал работает, кроме одного:
В методе numberOfRowsInSection мы привязывает количество элементов в Базе данных, и возвращает нужное нам количество в данный момент с помощью метода .count предварительно проверяя не пустая ли у нас база данных ( что бы наверное не получить nil). И вот в этот момент у меня падает приложение. если вписать вручную количество требуемых строк то всё работает, но очевидно, что база данных может меняться со временем и такой подход бесполезен.
Может кто-то знает по какой причине это может происходить (вроде как сделано всё в точности как описывалось в курсе, но всё равно не работает)
Мне кажется isEmpty это свойство массива, но у объекта Results такого нету. Можете сразу писать places.count, т.к. в случае если там пусто, вернется 0.
Пробовал изначально так, эффект тот же, краш при запуске.
Проблема вообще не понятна была, ибо объект типа Result является типом коллекции, и сам компилятор подсказывал через точечный синтаксис, методы доступные ему (isEmpty и count одни из них)
Скорее всего у вас проблема в том, что работа с любой БД - это асинхронные запросы.
У вас при инициализации контроллера, объект БД
var places = Result<Place>!
задан как уже обязательно существующий, а это не так, тк запрос в бд идёт только после инициализации контроллера. При обращении к нему в методе формирования таблицы у вас всё падает, тк он ещё не существует.
Решение:
-
задать этот параметр как опциональный `var places: Result? и соответственно обрабатывать количество элементов примерно так:
if let pls = places { return pls.count } else { return 0 }
или типа того
- Инициализировать этот объект сразу каким-то пустым объектом типа:
var places = Results<Place>()
или как там у это БД
Точно, что-то я сразу не обратил на это внимание.
Тогда вот еще запись по проще
return places?.count ?? 0