2016-11-19 2 views
0

Ich habe eine GeoFire-Abfrage, die nur füllt mein Array mit der entsprechenden keys nach der Methode getLocalUsers wird zweimal aufgerufen. Wie kann ich dies nur mit 1 Anruf erreichen? Hier ist mein Code ...Warum füllt GeoFire Query nur Array, wenn die Methode in Swift zweimal aufgerufen wird?

@IBAction func getKeys(sender: AnyObject) 
    { 
     var allKeys = [String]() 
     let geofireRef = self.ref.child("UserLocations") 
     let geoFire = GeoFire(firebaseRef: geofireRef) 
     let circleQuery = geoFire.queryAtLocation(self.location, withRadius: 200.6) 
     circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in 
      var users = [String]() 
      allKeys.append(key) 
      for keys in allKeys 
      { 
       let user = keys 
       users.append(user) 
      } 
      self.localUsers = users 
      self.getLocalUsers() 
     }) 
     self.getLocalUsers() 
    } 

Antwort

0

Ich dachte nicht genau, es war ein Firebase-Problem, war mir aber nicht sicher. Ich denke, die Hauptsache war das Erstellen eines Arrays in der Methode für keys, allKeys, so dass ich durchschleifen und richtig mit meinem öffentlichen Array sprechen konnte. Hier ist, wie ich es zur Arbeit gebracht habe. @FrankVanPuffelen bitte kommentieren ...

@IBAction getKeys() 
{ 
    var allKeys = [String]() 
     let geofireRef = self.ref.child("UserLocations") 
     geofireRef.keepSynced(true) 
     let geoFire = GeoFire(firebaseRef: geofireRef) 
     let circleQuery = geoFire.queryAtLocation(self.location, withRadius: 200.6) 
     circleQuery.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.friendsNearMeACTN() 
     }) 
} 
Verwandte Themen