Firebase извлекает данные из последнего поста - PullRequest
0 голосов
/ 26 августа 2018

Каждый раз, когда пользователь входит в приложение, private var currentKey: String! равен nil, поэтому вызывается:

databaseRef.child("OMG_Pictures").queryOrdered(byChild: "timeStamp").queryLimited(toLast: 5)

, и он всегда вытягивает старые сообщения.Как сохранить текущий ключ, чтобы пользователю не всегда приходилось каждый раз видеть одни и те же сообщения, а вместо этого они продолжали с того места, на котором остановились, и база данных получит только новые сообщения?(аналогично тому, что делают приложения для социальных сетей)

1 Ответ

0 голосов
/ 26 августа 2018

Вы хотите сделать пагинацию назад, что требует, чтобы вы (в данном случае) позвонили queryEnding(atValue: ...).Добавив это в ваш запрос, вы можете заставить его «пропустить» уже просмотренные вами элементы, по сути, пролистывая результаты назад.

Скажите, что ваш текущий запрос возвращает элементы с такими временными метками:

 96
 97
 98
 99
100

Чтобы использовать queryEnding(atValue: ...), вам нужно знать значение метки времени самого старого элемента, который вы уже видели, в данном случае 96.Вы передаете это в следующем запросе:

databaseRef
  .child("OMG_Pictures")
  .queryOrdered(byChild: "timeStamp")
  .queryEnding(atValue: 96)
  .queryLimited(toLast: 6)

И теперь вы получаете:

 91
 92
 93
 94
 95
 96

Вы заметите, что мы получаем 6 предметов сейчас.Это необходимо, поскольку последний элемент в результате этого нового запроса уже получен ранее.Поэтому нам нужно извлечь дополнительный элемент и удалить перекрывающийся элемент с кодом на стороне клиента.

Также обратите внимание, что возможно, что одно и то же значение для отметки времени встречается в ваших сообщениях несколько раз.В этом случае вам понадобится значение timestamp и ключа самого старого элемента, который вы видели, и оба эти значения передаются в queryEnding(atValue: ..., childKey: ... ).

.
...