Swift 从 CLLocation 获取 CLPlacemark
Swift Get CLPlacemark from CLLocation
我有一组自定义 Item
类型。此模型的位置和目的地 属性 类型为 CLLocation
获取此项目后,我想使用 Geocoder
发出两个请求以获取目的地和位置的 CLPlacemark
。然而,奇怪的是,我既可以打电话询问地点,也可以打电话询问目的地。如果我同时执行这两个请求,则只有第一个会触发。秒不火。
正如您在第一次调用后看到的那样,我并没有替换数组中的整个模型,而只是更改了一个 属性,所以我认为这不是问题所在。
for (i, element) in self.categories[index].items.enumerated() {
// either this
self.geocoder.reverseGeocodeLocation(element.location, completionHandler: { (placemarks, error) in
if let error = error {
self.error = error.localizedDescription
} else {
self.categories[index].items[i].locationPlacemark = placemarks?.first
}
})
// or this
self.geocoder.reverseGeocodeLocation(element.destination, completionHandler: { (placemarks, error) in
if let error = error {
self.error = error.localizedDescription
} else {
self.categories[index].items[i].destinationPlacemark = placemarks?.first
}
})
}
您无法提交并行反向地理编码请求 -
After initiating a reverse-geocoding request, do not attempt to initiate another reverse- or forward-geocoding request. Geocoding requests are rate-limited for each app, so making too many requests in a short period of time may cause some of the requests to fail. When the maximum rate is exceeded, the geocoder passes an error object with the value CLError.Code.network to your completion handler.
对于单个 Item
,您可以通过在第一个完成处理程序中启动第二个地理编码请求来解决问题,但这不适用于多个项目,因为您将提交多个 "first" 并行请求。
您将需要采用更复杂的方法,例如将操作提交到串行操作队列。
我有一组自定义 Item
类型。此模型的位置和目的地 属性 类型为 CLLocation
获取此项目后,我想使用 Geocoder
发出两个请求以获取目的地和位置的 CLPlacemark
。然而,奇怪的是,我既可以打电话询问地点,也可以打电话询问目的地。如果我同时执行这两个请求,则只有第一个会触发。秒不火。
正如您在第一次调用后看到的那样,我并没有替换数组中的整个模型,而只是更改了一个 属性,所以我认为这不是问题所在。
for (i, element) in self.categories[index].items.enumerated() {
// either this
self.geocoder.reverseGeocodeLocation(element.location, completionHandler: { (placemarks, error) in
if let error = error {
self.error = error.localizedDescription
} else {
self.categories[index].items[i].locationPlacemark = placemarks?.first
}
})
// or this
self.geocoder.reverseGeocodeLocation(element.destination, completionHandler: { (placemarks, error) in
if let error = error {
self.error = error.localizedDescription
} else {
self.categories[index].items[i].destinationPlacemark = placemarks?.first
}
})
}
您无法提交并行反向地理编码请求 -
After initiating a reverse-geocoding request, do not attempt to initiate another reverse- or forward-geocoding request. Geocoding requests are rate-limited for each app, so making too many requests in a short period of time may cause some of the requests to fail. When the maximum rate is exceeded, the geocoder passes an error object with the value CLError.Code.network to your completion handler.
对于单个 Item
,您可以通过在第一个完成处理程序中启动第二个地理编码请求来解决问题,但这不适用于多个项目,因为您将提交多个 "first" 并行请求。
您将需要采用更复杂的方法,例如将操作提交到串行操作队列。