我正试图在MapView上显示两个注释。
为什么第二个注释不会在MapView中显示?我试图改变地标[0]以放置标记[1]但没有帮助。
我本来可以使用for子句但是为了测试我重复了代码。
class Asiakas {
var nimi = ""
var osoite = ""
init(nimi: String, osoite: String) {
self.nimi = nimi
self.osoite = osoite
}
}
class ViewController: UIViewController {
@IBOutlet weak var mapView: MKMapView!
var asiakkaat:[Asiakas] = [
Asiakas(nimi: "Testi Asiakas", osoite: "Museokatu 10, helsinki"),
Asiakas(nimi: "Hyvä asiakas", osoite: "Pihlajatie 17, helsinki")
]
var asiakas:Asiakas!
override func viewDidLoad() {
super.viewDidLoad()
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(asiakkaat[0].osoite, completionHandler: { placemarks, error in
if error != nil {
print(error)
return
}
if let placemarks = placemarks {
let placemark = placemarks[0]
let annotation = MKPointAnnotation()
if let location = placemark.location {
annotation.coordinate = location.coordinate
self.mapView.addAnnotation(annotation)
}
}
})
geoCoder.geocodeAddressString(asiakkaat[1].osoite, completionHandler: { placemarks, error in
if error != nil {
print(error)
return
}
if let placemarks = placemarks {
let placemark = placemarks[0]
let annotation = MKPointAnnotation()
if let location = placemark.location {
annotation.coordinate = location.coordinate
self.mapView.addAnnotation(annotation)
}
}
})
}
答案 0 :(得分:0)
您无法同时拨打多个地理编码服务。
来自geocodeAddressString(_ addressString: String, completionHandler: CoreLocation.CLGeocodeCompletionHandler)
的文档:
使用指定的字符串提交转发地理编码请求。这个 method将指定的位置数据提交给地理编码服务器 异步并返回。您的完成处理程序块将是 在主线程上执行。 启动前向地理编码后 要求,不要试图发起另一个前锋或 反向地理编码请求。
所以你需要在完成第一个电话后进行第二次电话会议。
如果这样做,您将获得正确的结果:
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(asiakkaat[0].osoite, completionHandler: { placemarks, error in
if error != nil {
print(error)
return
}
geoCoder.geocodeAddressString(self.asiakkaat[1].osoite, completionHandler: { placemarks, error in
if error != nil {
print(error)
return
}
if let placemarks = placemarks {
let placemark = placemarks[0]
let annotation = MKPointAnnotation()
if let location = placemark.location {
annotation.coordinate = location.coordinate
self.mapView.addAnnotation(annotation)
}
}
})
if let placemarks = placemarks {
let placemark = placemarks[0]
let annotation = MKPointAnnotation()
if let location = placemark.location {
annotation.coordinate = location.coordinate
self.mapView.addAnnotation(annotation)
}
}
})