Проверьте, нет ли поблизости местоположений с помощью GeoFire

Я пытаюсь найти близлежащие зарегистрированные местоположения с помощью GeoFire и вернуть значение по умолчанию, если в указанном радиусе их нет. Моя проблема в том, что когда GeoFire не находит ничего поблизости, он абсолютно ничего не возвращает. Есть ли другой способ сделать это?

    let geoFire = GeoFire(firebaseRef: DataService().LOC_REF)
    let myLoc = CLLocation(latitude: 10.500000, longitude: -100.916664)
    let circleQuery = geoFire.queryAtLocation(myLoc, withRadius: 100.0)
    circleQuery.observeEventType(GFEventType.KeyEntered, withBlock: {
        (key: String!, location: CLLocation!) in
        self.allKeys[key]=location
        print(self.allKeys.count) //NOT GETTING HERE
        print(key)
        //from here i'd like to use the key for a different query, or determine if there are no keys nearby
            }
        })
    })

заранее спасибо


person Jacobo Koenig    schedule 31.05.2016    source источник


Ответы (2)


Вот как вы можете использовать эти две функции для создания списка ключей и прослушивания завершения создания списка.

func fetchLocations() {
    keys = [String]()

    let geoFire = GeoFire(firebaseRef: DataService().LOC_REF)
    let myLoc = CLLocation(latitude: 10.500000, longitude: -100.916664)
    let circleQuery = geoFire.queryAtLocation(myLoc, withRadius: 100.0)

    // Populate list of keys
    circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in
        print("Key '\(key)' entered the search area and is at location '\(location)'")
        keys.append(key)
    })

    // Do something with list of keys.
    circleQuery.observeReadyWithBlock({
        print("All initial data has been loaded and events have been fired!")
        if keys.count > 0 {
            // Do something with stored fetched keys here.
            // I usually retrieve more information for a location from firebase here before populating my table/collectionviews.  
        }

    })
}
person Beau Nouvelle    schedule 31.05.2016

Вы захотите дождаться запроса, чтобы сообщить, что это сделано. Из документации GeoFire:

Иногда вам нужно знать, когда данные для всех начальных ключей были загружены с сервера и были запущены соответствующие события для этих ключей. Например, вы можете скрыть анимацию загрузки после полной загрузки данных. GFQuery предлагает способ прослушивания этих готовых событий:

query.observeReadyWithBlock({
  println("All initial data has been loaded and events have been fired!")
})
person Frank van Puffelen    schedule 31.05.2016
comment
Спасибо .. после того, как запрос выполнен, как я могу получить доступ к найденным ключам? - person Jacobo Koenig; 31.05.2016
comment
Вам придется перехватывать их, когда они входят в обработчик key_entered. - person Frank van Puffelen; 31.05.2016
comment
Могу ли я просто запросить те, которые уже есть? Мои местоположения не являются динамическими. - person Jacobo Koenig; 31.05.2016
comment
Ага. Вы observeEventType(.KeyEntered и обрабатываете их по мере поступления. Когда observeReadyWithBlock срабатывает, все готово. - person Frank van Puffelen; 31.05.2016