2017-11-09 3 views
1

Ich versuche derzeit, meine Daten vom Firebase zu beziehen und Anmerkungen in meinem MKMapKitView zu erstellen. Ich glaube, dass ich die Daten richtig abrufe, aber die Anmerkungen nicht richtig erstelle.Abrufen von Koordinaten von Firebase zum Erstellen von Anmerkungen

Ich denke, dass, weil es mehrere Benutzer gibt, ich es nicht einfach als eine normale Art der Kommentierung einrichten kann.

let userLocation = CLLocationCoordinate2D(latitude: Double(userLatitude!), longitude: Double(userLongitude!)) 

       let userAnnotation = MKPointAnnotation(); 
     userAnnotation.coordinate = self.userLocation!; 
       //userAnnotation.title = "Riders Location"; 
       map.addAnnotation(userAnnotation); 

     } 

Ich werde auch hinzufügen, wie ich die Benutzer abrufen.

func retrieveUsers(){ 
     let ref = Database.database().reference() 
     ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in 
      let users = snapshot.value as! [String: AnyObject] 
      self.user.removeAll() 
      for (_,value) in users { 
       if let uid = value["uid"] as? String { 
        if uid != Auth.auth().currentUser!.uid { 
         let userToShow = User() 
         if let fullName = value["full name"] as? String, 
          let userLongitude = value["long"] as? Double, 
          let userLatitude = value["lat"] as? Double 


         { 
          userToShow.fullName = value["full name"] as? String 
          userToShow.imagePath = value["urlToImage"] as? String 
          userToShow.userID = value["uid"] as? String 
          userToShow.userLongitude = value["long"] as? String 
          userToShow.userLatitude = value["lat"] as? String 

          self.user.append(userToShow) 
         } 


        } 

       } 
      } 
      DispatchQueue.main.async { 
       self.map.reloadInputViews() 

       //not sure if this is right 
      } 
     }) 

Vielen Dank !!

+0

Hallo Becca, erhalten Sie Fehlermeldungen? Was siehst du auf deiner Karte? irgendwelche anderen Details für uns, um ein Gefühl dafür zu bekommen, was Sie für falsch halten? –

Antwort

0

Es ist eine Ahnung, aber ich denke, Sie sind nach einer solchen Funktion - Sie waren ziemlich nah mit Ihnen Aufwand! NB - keine Semikola in schneller Syntax.

private func addUserAnnotation(user: User) {   

    let userAnnotation = MKPointAnnotation() 
    let userLocation = CLLocationCoordinate2D(latitude: Double(user.userLatitude!), 
longitude: Double(user.userLongitude!)) 

    userAnnotation.coordinate = userLocation 
    //userAnnotation.title = "Riders Location" 
    self.map.addAnnotation(userAnnotation) 

} 

Rufen Sie die Funktion wie diese - sagen wir, Sie Anmerkung nur für den ersten Benutzer von Ihrem Benutzer Array hinzufügen möchten:

addUserAnnotation(user: user[0]) //addUserAnnotation(user[0]) also acceptable 

Hier ist die OP Klasse für den Anwender. Ich denke, das ist auch wichtig

class User: NSObject { 

    var userID: String! 
    var fullName: String! 
    var imagePath: String! 
    var userLongitude: Double! // change from String! 
    var userLatitude: Double! // change from String! 

} 
+0

Ich erhalte dies als Fehler "Wert des Nichtfunktionstyps kann nicht aufgerufen werden 'MKPointAnnotation'" Firebase speichert alle Daten als String ... Vielen Dank für Ihre Hilfe! –

+0

Kein Problem, lassen Sie uns einen Test ausführen, um zu sehen, ob es ein Problem gibt, das von den Benutzereigenschaften userLatitude und userLongitude auf double umgesetzt wird. Wie wäre es, nur einige Dezimalzahlen hinzuzufügen und zu sehen, ob eine Annotation zu Ihrer Map hinzugefügt wurde? Sie können geeignete Koordinaten finden, indem Sie print (user.userLatitude) und print (user.userLongitude) oben in der addUserAnnotation-Funktion ausführen. –

+0

Ich erhalte nichts, wenn ich versuche, die Benutzerkoordinaten zu drucken. Noch bin ich in der Lage, Koordinaten einzustecken und sie arbeiten zu lassen ... Ich werde dort anfangen –