我正在尝试撤消所有照片的地理编码位置。我使用反向地理编码方法如下。
func fetchLocation(coordinate: CLLocationCoordinate2D, completion: @escaping (_ location: LocationData?) -> Void) {
let lockQueue = DispatchQueue(label:"com.LockQueue")
lockQueue.sync{
DispatchQueue.main.async {
self.geocoder.reverseGeocodeCoordinate((coordinate), completionHandler: {
reverseGeoCodeResponse, _ in
if let reverseGeoCodeResponse = reverseGeoCodeResponse, let reverseGeoCode = reverseGeoCodeResponse.firstResult() {
let locationData = LocationData()
locationData.locality = reverseGeoCode.locality
locationData.subLocality = reverseGeoCode.subLocality
locationData.administrativeArea = reverseGeoCode.administrativeArea
locationData.postalCode = reverseGeoCode.postalCode
locationData.country = reverseGeoCode.country
locationData.latitude = (coordinate.latitude)
locationData.longitude = (coordinate.longitude)
locationData.isDataFromGoogle = true
completion(locationData)
}
}
}
}
有时这个方法不会给我回调。我不明白为什么,添加此方法的另一件事可以被多个线程同时调用,所以我使用lockqueue来确保我不会遇到同步问题。
答案 0 :(得分:0)
最后,经过几天的调试,我解决了这个问题。
我使用as.geoCoder将GEOCoder作为实例变量,现在我改为以下
"scripts": {
"start": "webpack-dev-server --hot --open",
"lint": "eslint src" },
我改为局部变量并为每个地理反复调用创建。