2017-12-10 7 views
0

모든 사진의 위치 정보 위치를 취소하려고합니다. 나는 다음과 같이 역 지오 코더 방법을 사용하고있다.Google지도 : 역 지오 코드 콜백이 수행되지 않습니다.

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

내 중단 점이이 지점에 도달했기 때문에 완료 핸들러가 리턴하는지 확인합니다.이 메소드에 대한 오류를 처리하는 방법 .self.geocoder.reverseGeocodeCoordinate ((coordinate), completionHandler : {.}). – santhosh

답변

0

마지막으로 디버깅 일 이후에이 문제가 해결되었습니다. 내가 self.geoCoder로 사용하여 인스턴스 변수로 지오 코더를 만드는 중이라서

지금 나는 지역 변수로 변경

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

을 다음 각 georeverse 호출 만들기로 변경되었습니다.