Остановить запрос Geofire после получения всех данных

Я использую 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. Я хочу добиться разбиения на страницы. Я имею в виду сначала загрузить все геоданные со всего мира и загрузить их в свое приложение с разбиением на страницы.

Итак, мой вопрос

  1. Есть ли способ определить, что вся запись в firebase из геозапроса была загружена? Скажем, если у меня есть неизвестное количество геоданных в firebase, я получаю уведомление, когда все загружается, чтобы я мог отключить геозапрос.

  2. Есть ли способ отключить геозапрос?


person user172902    schedule 12.07.2016    source источник
comment
Для этого вы должны использовать событие Query Ready, оно срабатывает, когда возвращается начальный набор ключей. Однако запрос будет продолжать синхронизироваться, поэтому, если ваши данные изменятся, вы получите обновления. См. github.com/firebase/.   -  person Frank van Puffelen    schedule 12.07.2016
comment
Еще раз спасибо, Фрэнк. Я должен был немного лучше изучить документацию   -  person user172902    schedule 13.07.2016