2017-12-10 8 views
0

すべての写真のジオコード位置を逆にしようとしています。私は以下のように逆ジオコーダー法を使用しています。Google maps:逆ジオコードコールバックが来ない

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) 

    } 
    } 

} 
} 

このメソッドはコールバックを返さないことがあります。なぜ私は理解できませんでした。このメソッドを追加するもう1つのことは、複数のスレッドが同じように呼び出すことができるので、lockqueueを使用して同期の問題に取り組まないようにしています。

+0

どのように完了ハンドラが呼び出されていないと判断していますか?私はあなたがそのメソッドによって生成される可能性のあるエラーを無視していることを知っています。 –

+0

私はブレークポイントがこの点に到達しているので、補完ハンドラが復帰していることを確認しています。このメソッドのエラーを処理する方法.self.geocoder.reverseGeocodeCoordinate((coordinate)、completionHandler:{。 – santhosh

答えて

0

最後に、私はこの問題をデバッグした後に解決しました。

self.geoCoderは今、私はローカル変数に変更し、各georeverseコールのために作成

DispatchQueue.main.async { 
// new Code 
let geoCoder = GMSGeoCoder() 
geoCoder.reverseGeocodeCoordinate((coordinate), completionHandler: { 
          reverseGeoCodeResponse, _ in 
} 
     // OLD code    self.geocoder.reverseGeocodeCoordinate((coordinate), completionHandler: { 
          reverseGeoCodeResponse, _ in 
} 
} 

次のように変更と私が使用して、インスタンス変数としてジオコーダを作っています。

関連する問題