我有 mapView 和来自 firebase 的地址。现在我只能在 mapView 中添加一个注释,但是在 print("Address (self.allAddresses)") 中我得到了三个地址:
地址 Москва, Пресненская набережная д.8, квартира 195, подъезд 94
地址 Москва, ул。 Правды д.24 строение 3
地址 Москва,ул.Электрозаводская д.21
如何添加三个或更多注释?
我的火力基地:
{
«Address» : {
«AddressOne» : {
"address" : "Москва, Пресненская набережная д.8, квартира 195, подъезд 94",
},
"AddressTwo» : {
"address" : "Москва, ул. Правды д.24 строение 3",
},
"AddressThree» : {
"address" : "Москва,ул.Электрозаводская д.21",
}
}
}
还有我的代码:
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)")
})
}
}
})
}
}
最佳答案
- 尝试在“for”循环中分配 geoCoder。
调用
geocoder.cancelGeocode()
方法。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() })
关于ios - 如何在mapVIew中添加多重标注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46462386/