2016-11-13 9 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

ここでの問題は、observerブロックが起動するたびにgetLocalUsers funcを呼び出すことです。あなたはすべての単一の結果のためにそれを呼び出しています。オブザーバーブロックが実行されるたびに、結果をカウントし、カウントに1を加算する必要があります。カウントが結果カウントに達すると、3回ではなく1回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() 
     }) 
関連する問題