2016-11-19 3 views
0

getLocalUsers 메서드를 두 번 호출 한 후 해당 배열에 채우는 GeoFire 쿼리가 keys입니다. 1 회의 통화만으로이 문제를 어떻게 해결할 수 있습니까? 여기 내 코드는 ...Swift에서 메서드가 두 번 호출 될 때 GeoFire 쿼리 만 배열을 채우는 이유는 무엇입니까?

@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() 
    } 

답변

0

필자는 Firebase 문제라고 정확하게 생각하지는 않았지만 확실하지 않았습니다. 주된 것은 keys, allKeys을위한 메소드에서 배열을 생성하고 있었기 때문에 루프를 통과하고 내 퍼블릭 어레이에 올바르게 말할 수 있다고 생각합니다. 내가 일하는 방법을 알려 드리겠습니다. @FrankVanPuffelen 의견을주세요 ...

@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() 
     }) 
}