I have mapView and address from firebase. Now i can add in mapView only one annotation, but in print("Address (self.allAddresses)") i got three address:
Address Москва, Пресненская набережная д.8, квартира 195, подъезд 94
Address Москва, ул. Правды д.24 строение 3
Address Москва,ул.Электрозаводская д.21
How i can add three or more annotations?
My firebase:
{
«Address» : {
«AddressOne» : {
"address" : "Москва, Пресненская набережная д.8, квартира 195, подъезд 94",
},
"AddressTwo» : {
"address" : "Москва, ул. Правды д.24 строение 3",
},
"AddressThree» : {
"address" : "Москва,ул.Электрозаводская д.21",
}
}
}
And my code:
class AddressesMapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet weak var mapView: MKMapView!
var allAddresses: String = ""
var count = 0
let geocoder = CLGeocoder()
var addressRef: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
addressRef = Database.database().reference(withPath: "Address")
loadAddressFromFirebase()
}
func loadAddressFromFirebase() {
addressRef.observe(.value, with: { (snapshot) in
for address in snapshot.children.allObjects as! [DataSnapshot] {
let value = address.value as! NSDictionary
self.allAddresses = value["address"] as? String ?? ""
print("Address \(self.allAddresses)")
if self.count < self.allAddresses.count {
let addresses = self.allAddresses
self.geocoder.geocodeAddressString(addresses, completionHandler: { (placemarks, error) in
print("Address - \(addresses)")
guard error == nil else { return }
guard let placemarks = placemarks else { return }
if let placemark = placemarks.first {
self.mapView.addAnnotation(MKPlacemark(placemark: placemark))
}
self.count += 1
print("Count - \(self.count)")
})
}
}
})
}
}
Call geocoder.cancelGeocode()
method.
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(addresses, completionHandler: { (placemarks, error) in
print("Address - \(addresses)")
guard error == nil else { return }
guard let placemarks = placemarks else { return }
if let placemark = placemarks.first {
self.mapView.addAnnotation(MKPlacemark(placemark: placemark))
}
self.count += 1
print("Count - \(self.count)")
geocoder.cancelGeocode()
})