2016-11-13 1 views
1

사용자 ID 또는 keys을 가져 오는 GeoFire 쿼리가 있습니다. 순서대로 keys으로 돌아가지만 여러 시퀀스가 ​​나타납니다. 마지막으로 업데이트 된 시퀀스는 어떻게 얻을 수 있습니까?Swift를 사용하여 Firebase GeoFire로 여러 키를 쿼리하는 방법은 무엇입니까?

@IBAction func friendsNearMeACTN(sender: AnyObject) 
    { 
     let geofireRef = self.ref.child("UserLocations") 
     let geoFire = GeoFire(firebaseRef: geofireRef) 
     let circleQuery = geoFire.queryAtLocation(self.location, withRadius: 20.6) 
     circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in 
      self.localUsers.append(key) 
      self.getLocalUsers() 
     }) 
    } 

func getLocalUsers() 
{ 
    print(self.localUsers) 

} 

이 내가 func getLocalUsers()에서 다시 받고있는 무슨 ....

["WGueYzDjH4NW2vneHOyGmjf6PYB3"] 
["WGueYzDjH4NW2vneHOyGmjf6PYB3", "Cg4pQj36ttNUuWNqtc16tIFmI0A2"] 
["WGueYzDjH4NW2vneHOyGmjf6PYB3", "Cg4pQj36ttNUuWNqtc16tIFmI0A2", "N5pgqGEhW2f7PGGVmB3AQ8v1uPk2"] 

가 어떻게 단순히 마지막 배열을 얻을 수있다?

답변

0

여기서 문제는 관찰자 블록이 실행될 때마다 getLocalUsers func을 호출한다는 것입니다. 당신은 모든 단일 결과에 대해 그것을 부르고 있습니다. 관찰자 블록이 실행될 때마다 결과를 계산하고 계수에 1을 더해야합니다. 카운트가 결과 카운트에 도달하면 3 회 대신 getLocalUsers 함수를 한 번 호출하십시오. 아래 코드를 사용해보십시오. 나는 그것을 시험하지 않았다.

@IBAction func friendsNearMeACTN(sender: AnyObject){ 
    var i = 0//The counter 
    let geofireRef = self.ref.child("UserLocations") 
    let geoFire = GeoFire(firebaseRef: geofireRef) 
    let circleQuery = geoFire.queryAtLocation(self.location, withRadius: 20.6) 
    circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in 
     self.localUsers.append(key) 
     i += 1//Add one to i every time observer fires 
     if i == self.key.count {//if counter (i) is equal to the keys returned call getLocalUsers func once 
      self.getLocalUsers() 
     } 
    }) 
} 

func getLocalUsers(){ 
    print(self.localUsers) 
} 
1

대답은 GeoFire 쿼리 연속 비동기 호출입니다 만 self.localUsers()에게 수집 된 정보를 공급하는 최종 코드 observeReadyWithBlock을 필요로한다는 것이다. 다음은 그 예입니다 ...

let regionQuery = geoFire.queryWithRegion(self.region) 
     regionQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in 
      var users = [String]() 
      users.append(key) 
      for keys in users 
      { 
       let user = keys 
       allKeys.append(user) 
      } 
      self.localUsers = allKeys 
      self.getLocalUsers() 
     }) 

     regionQuery.observeReadyWithBlock({() -> Void in 
      self.getLocalUsers() 
     }) 
관련 문제