2016-03-26 15 views
0

Bir kullanıcının konumunu getLocationForKey (Geofire) adlı bir işlevle bulmaya çalışıyorum. Konum Firebase'de saklanır. Ben fonk tableview bu işlevi çağırır:GeoFire'ın işlevi getLocationForKey neden aşırı dolduruldu?

MyLocation: [0.0, 0.0]

func getUserLocation(userID: String) -> CLLocation { 

    var userLocation = CLLocation() 
    print(userID) 

    let geoFire = GeoFire(firebaseRef: ref.childByAppendingPath("locations")) 
    geoFire.getLocationForKey(userID, withCallback: { (location, error) in 

     if (location != nil) 
     { 
      userLocation = CLLocation(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) 
      print("userLocation: [\(userLocation.coordinate.latitude), \(userLocation.coordinate.longitude)]") 
     } 
     else if (error != nil) 
     { 
      print("An error occurred getting the location for \(userID): \(error.localizedDescription)") 
     } 
     else 
     { 
      print("GeoFire does not contain a location for \(userID)") 
     } 
    }) 

    return userLocation 
} 

Sonuç olarak, ben bu olsun şu şekildedir:

// Get user Distance 
    var myLocation = CLLocation() 
    myLocation = getUserLocation(ref.authData.uid) 
    print("myLocation: [\(myLocation.coordinate.latitude), \(myLocation.coordinate.longitude)]") 

getUserLocation görünüyor userLocation: [123.456, 123.456]

bana garip geliyor, çünkü bir şekilde getLo'daki kod cationForKey atladı, ilk ve sonra userLocation myLocation olsun. Nedenini bilen var mı? Herhangi bir yardım takdir, teşekkürler!

cevap

0

Cevabın getLocationForKey üzerinden atladı edilmediğini gösterir olduğuna inanıyoruz - "userLocation ... konumu baskı Ancak

, baskı (" o (baskı ile gösterildiği gibi yürütülüyor MyLocation ... deyim getLocationForKey Firebase verileri döndürmek için zaman vardır içinde kodundan önce gerçekleşiyor (bloğunun dışında).

böylece Firebase genellikle bloğun içine, o veriyi döndürür sonra verileri işlemek gerekir Firebase asenkron olduğunu unutmayın.

+0

Senkronize olmayan ağ iletişimi göz önünde bulundurulduğunda Verileri hücrelere ayırdığım tablo görünümü işlevinde getUserLocation öğesini çağırmak iyi bir fikir olmayabilir. Aksi takdirde "ölümcül hata" alırdım: İsteğe bağlı bir değer çıkarılırken beklenmedik bir şekilde sıfır bulunur "Kullanıcı konumunun nereden alınacağını nerede/hangi işlevde kullanacağımı biliyor musunuz? – yoshimoshi

+0

@yoshimoshi Bu, bir tabloda sunulan kullanıcıların listesi Kendi adı ve konumu gibi bir şeyle mi görün? – Jay

+0

Evet bu doğru, ancak bu görüntüleyiciyi yüklemeden önce tüm gerekli bilgileri yükleyerek bu sorunu çözdüm. Bunu yapmanın ortak yolu bu mu? – yoshimoshi

İlgili konular