Ich versuche, den Standort eines Benutzers mit einer Funktion namens GetLocationForKey (Geofire) zu erhalten. Der Standort ist in Firebase gespeichert. Ich nenne diese Funktion in func Tableview:Warum wurde GeoFires Funktion getLocationForKey überlagert?
// Get user Distance
var myLocation = CLLocation()
myLocation = getUserLocation(ref.authData.uid)
print("myLocation: [\(myLocation.coordinate.latitude), \(myLocation.coordinate.longitude)]")
getUserLocation sieht wie folgt aus:
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
}
Als Ergebnis erhalte ich diese:
MyLocation: [0.0, 0.0]
userLocation: [123.456, 123.456]
das scheint mir seltsam, weil irgendwie der Code in getLo cationForKey wurde übersprungen, ich bekomme myLocation zuerst und danach userLocation. Weiß jemand warum? Jede Hilfe wird geschätzt, danke!
Danke, in Anbetracht der asynchronen Vernetzung Es ist wahrscheinlich keine gute Idee, getUserLocation in der tableview-Funktion aufzurufen, in der ich den Zellen Daten zuteile. Sonst würde ich "fataler Fehler: unerwartet gefunden Null beim Entpacken eines optionalen Wertes" erhalten. Wissen Sie vielleicht, wo/in welcher Funktion ich versuchen sollte, den Benutzerstandort abzurufen? – yoshimoshi
@ yoshimoshi Ist dies eine Liste von Benutzern, die in einer Tabelle angezeigt wird, mit ihrem Namen und ihrer Position? – Jay
Ja, das ist richtig, aber ich habe dieses Problem gelöst, indem ich alle notwendigen Informationen geladen habe, bevor ich diesen Viewcontroller geladen habe. Ist das der übliche Weg? – yoshimoshi