Ios 如何在mapVIew中添加多重注释
我有来自firebase的地图视图和地址。现在我只能在地图视图中添加一个注释,但在打印(“地址(self.alladdress)”)中我得到了三个地址: 地址:第8、195、94号 地址:МаСаа,аа。Пааааф.24аааа3 地址:Маааазаааааааааааа1072 如何添加三个或更多注释 我的火力基地:Ios 如何在mapVIew中添加多重注释,ios,swift,firebase,mapkit,mkmapview,Ios,Swift,Firebase,Mapkit,Mkmapview,我有来自firebase的地图视图和地址。现在我只能在地图视图中添加一个注释,但在打印(“地址(self.alladdress)”)中我得到了三个地址: 地址:第8、195、94号 地址:МаСаа,аа。Пааааф.24аааа3 地址:Маааазаааааааааааа1072 如何添加三个或更多注释 我的火力基地: { «Address» : { «AddressOne» : { "address" : "Москва, Пресненская набережн
{
«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)")
})
}
}
})
}
}
类地址MapViewController:UIViewController、MKMapViewDelegate、CLLocationManagerDelegate{
@ibvar映射视图:MKMapView!
var alladdress:String=“”
变量计数=0
让geocoder=CLGeocoder()
var addressRef:DatabaseReference!
重写func viewDidLoad(){
super.viewDidLoad()
addressRef=Database.Database().reference(带路径:“地址”)
loadAddressFromFirebase()
}
func loadAddressFromFirebase(){
addressRef.observe(.value,其中:{(快照)位于
snapshot.children.allObjects中的地址为![DataSnapshot]{
设value=address.value为!NSDictionary
self.allAddresses=值[“地址”]为?字符串??“
打印(“地址\(self.allAddresses)”)
如果self.count
- 尝试在“for”循环中分配地理编码器
- 调用
方法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() })
self.mapView.addAnnotation
)是否运行三次?一次。我认为这是个问题,但我不明白该怎么办for循环会迭代3次吗?不,我认为这是因为geocoder只能处理一个地址,但我可能是错的太好了,它成功了,非常感谢。为什么我不想尝试删除一个循环…)