У меня есть подкласс UITableView, который я заполняю из коллекции Firestore.Я получаю только 20 документов за раз и использую делегат UITableViewDataSourcePrefetching
для получения следующей «страницы» из 20 документов из Firestore, когда пользователь приближается к концу загруженного массива.
Ниже приведен мой код * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' * '' * '*' ('] *, я думаю, я знаю, что / где проблема (см. комментарий в * * *), но я могунеправильно.Даже если я прав, я не смог найти способ исправить это.
Мой запрос отсортирован в порядке убывания по значению timestamp
документов, которое, как следует из названия,, представляет время, когда документ был создан.Это означает, что в табличном представлении самые новые документы будут отображаться вверху , а самые старые - внизу.
Все отлично работает, кроме ...
Проблема : Когда создается новый документ, каждый элемент в таблице шунтируется на строку, потому что новый документ имеет новейшую временную метку и помещается вверху.Отлично, за исключением того, что когда это происходит, все прослушиватели моментальных снимков запроса (кроме первого) больше не используют правильный документ для запуска после.Снимок документа, первоначально полученный с помощью documents.last!
, больше не является правильным документом, после которого должен начинаться запрос.Я не знаю, как изменить параметр startAfter
существующего прослушивателя снимков.Я не смог найти какой-либо метод, принадлежащий запросу, который мог бы использовать, чтобы изменить это.
Опять же, это может не быть причиной того, что я вижу вещи не в порядке, когда добавляются новые документы, но я думаю,это.Если у кого-то есть совет, как решить эту проблему, я буду очень признателен.
Ссылки, которые я использовал, чтобы получить здесь:
Дополнительные примечания:
- Несмотря на то, что решить эту проблему было бы намного проще, я не хочу использовать
getDocuments
в запросе.В этом случае важно иметь обновления почти в реальном времени. - Я не могу использовать FirebaseUI, потому что мой сценарий использования требует функциональности, которая еще не доступна.Например, вы, возможно, заметили, что я использовал
indexPath.section
вместо indexPath.row
, потому что таблица состоит из множества однорядных секций, так что между ячейками можно поместить вертикальное заполнение.