0
我试图在MapView中显示两个注释。为什么第二个MKPointAnnotation不显示?
为什么第二个注释不显示在MapView中?我试图改变地标[0]来放置标记[1],但没有任何帮助。
我可以用于子句,但为了测试我重复了代码。
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)
}
}
})
}
好,感谢您的回答。我可能会把geoCode放到它自己的函数中,并从viewDidLoad函数调用它。会有大约100个注释。 – Erva
@Erva意识到地理编码有一个速率限制。 来自文档'应用程序应该意识到他们如何使用地理编码。地理编码请求对每个应用都是速率限制的,因此在短时间内请求太多可能会导致某些请求失败。 (当超过最大速率时,地理编码器将带有网络值的错误对象返回给关联的完成处理程序。)' –
我已经在for子句中测试了大约100个地址。 Geocode没有解决大约1/5的地址。这解释了原因。我认为地址代码并不“知道”地址,但可能是因为费率限制。完成处理程序没有给出任何错误消息。 – Erva