У меня есть приложение с поддержкой Firebase со следующей структурой базы данных:
posts
/uid
/postId
Первоначально я загружал данные с узла posts/uid
, используя ObserveEventOfType
с .childAdded
. Это будет загружать устаревшие данные часто (~ 5 раз в день) для всех пользователей моего приложения одновременно. При попытке обновить данные, создав новую запись, Firebase все равно будет возвращать устаревшие данные.
В результате я решил попробовать keepSynced
. Теперь, если бы моя ссылка выглядела так:
reference = Database().database.reference.child("posts").child(uid)
keepSynced
загрузит все данные на этом узле, что может привести к очень большим загрузкам, если в этом узле много дочерних элементов. Поэтому я решил изменить ссылку / запрос на:
reference = Database().database.reference.child("posts").child(uid).queryLimited(toLast: 25)
При включении keepSynced
для этого узла он успешно синхронизируется с последними 25 дочерними узлами. Тем не менее, я все еще сталкиваюсь с проблемой получения устаревших данных довольно часто. Итак, вот мои вопросы:
При добавлении режима keepSynced
для ограниченного запроса он только синхронизирует c с исходного узла, к которому вы добавили его, или всегда просто syn c 25 последних потомков этого узла?
Где лучше всего добавить строку keepSynced(true)
в коде? Перед тем, как загрузить ссылку, в viewWillAppear
или внутри фактического обратного вызова загрузки?
Точно так же, где лучше всего использовать keepSynced(false)
?
Удаляют ли слушатели keepSynced
, когда приложение переходит в фоновый режим?
Почему keepSynced
иногда не обращается к дочерним обновлениям ?
В настоящее время я использую keepSynced(true)
внутри функции, которую я использую для загрузки сообщений, которая вызывается на viewDidLoad
.
Заранее спасибо.