Я использую geoFire3.0 для запроса ближайших данных на основе местоположения пользователей, используя следующий код
let ref = DataService.ds.REF_LOCATION
let geoFire = GeoFire(firebaseRef: ref)
let center = CLLocation(latitude: lat, longitude: long)
let circleQuery = geoFire.queryAtLocation(center, withRadius: SEARCH_RADIUS)
_ = circleQuery.observeEventType(GFEventType.KeyEntered) { (key: String!, location: CLLocation!) in
Проблема в том, что этот запрос запускается каждый раз, когда находят данные, соответствующие критериям. Я должен отслеживать все данные, помещать их в массив и использовать sortInPlace для их сортировки. Это все хорошо, если у меня есть небольшой объем данных и я хочу загрузить все и использовать данные после того, как все отсортировано.
Тем не менее, я вижу две основные проблемы с этим: 1. Если кто-либо в радиусе поиска добавляет новую запись в firebase, это будет вызвано, что может раздражать. (Поскольку не наблюдается ни одного события) 2. Я хочу добиться разбиения на страницы. Я имею в виду сначала загрузить все геоданные со всего мира и загрузить их в свое приложение с разбиением на страницы.
Итак, мой вопрос
Есть ли способ определить, что вся запись в firebase из геозапроса была загружена? Скажем, если у меня есть неизвестное количество геоданных в firebase, я получаю уведомление, когда все загружается, чтобы я мог отключить геозапрос.
Есть ли способ отключить геозапрос?