Заполнение UITableView из Firestore с помощью курсоров запросов (подкачка страниц) - PullRequest
0 голосов
/ 20 января 2019

У меня есть подкласс UITableView, который я заполняю из коллекции Firestore.Я получаю только 20 документов за раз и использую делегат UITableViewDataSourcePrefetching для получения следующей «страницы» из 20 документов из Firestore, когда пользователь приближается к концу загруженного массива.

Ниже приведен мой код * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' * '' * '*' ('] *, я думаю, я знаю, что / где проблема (см. комментарий в * * *), но я могунеправильно.Даже если я прав, я не смог найти способ исправить это.

Мой запрос отсортирован в порядке убывания по значению timestamp документов, которое, как следует из названия,, представляет время, когда документ был создан.Это означает, что в табличном представлении самые новые документы будут отображаться вверху , а самые старые - внизу.

Все отлично работает, кроме ...

Проблема : Когда создается новый документ, каждый элемент в таблице шунтируется на строку, потому что новый документ имеет новейшую временную метку и помещается вверху.Отлично, за исключением того, что когда это происходит, все прослушиватели моментальных снимков запроса (кроме первого) больше не используют правильный документ для запуска после.Снимок документа, первоначально полученный с помощью documents.last!, больше не является правильным документом, после которого должен начинаться запрос.Я не знаю, как изменить параметр startAfter существующего прослушивателя снимков.Я не смог найти какой-либо метод, принадлежащий запросу, который мог бы использовать, чтобы изменить это.

Опять же, это может не быть причиной того, что я вижу вещи не в порядке, когда добавляются новые документы, но я думаю,это.Если у кого-то есть совет, как решить эту проблему, я буду очень признателен.

Ссылки, которые я использовал, чтобы получить здесь:

Дополнительные примечания:

  • Несмотря на то, что решить эту проблему было бы намного проще, я не хочу использовать getDocuments в запросе.В этом случае важно иметь обновления почти в реальном времени.
  • Я не могу использовать FirebaseUI, потому что мой сценарий использования требует функциональности, которая еще не доступна.Например, вы, возможно, заметили, что я использовал indexPath.section вместо indexPath.row, потому что таблица состоит из множества однорядных секций, так что между ячейками можно поместить вертикальное заполнение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...