2016-10-21 5 views
0

여기 내 상황입니다. (Swift 2.2 사용)CLLocation 목록의 장소/도시 이름

나는 좌표 목록 (CLLocation)을 가지고 있습니다. 해당 지역/도시를 가져 오려면 reverseGeocodeLocation으로 전화해야합니다. 요소를 반복하려고하면 Apple이 몇 초 내에 하나의 호출을 보내도록 제안하면서 일부 호출이 실패 할 가능성이 있습니다. 그래서 각 호출 사이에 지연을 추가해야합니다.

이것을 달성 할 방법이 있습니까? 어떤 도움을 주셔서 감사합니다.

요청 사이에서 1 초 이상으로,이 코드는 위치의 집합을 선언하고 그것들을 하나 하나 보이는

+0

부분적으로 관련이 있습니다 - 좌표 목록은 어디서 오는 것입니까? 과거에 얻은 결과에 대한 네트워크 호출을 피하기 위해 결과를 캐시하십시오. – rmaddy

+0

@rmaddy 예, 위도가 같은 항목이 여러 개인 경우 API를 한 번만 호출합니다. 목록은 사진 라이브러리에 있습니다. (DB에 내용을 저장하고 이러한 항목을 사용합니다.) –

답변

2

(우리는 같은 위도 여러 항목이있는 경우, 우리가 한 번만 API를 호출) :

var locations = Set<CLLocation>() 

    func reverseGeocodeLocation() { 
     guard let location = locations.popFirst() else { 
      geocodingDone() 
      return 
     } 
     CLGeocoder().reverseGeocodeLocation(location) { placemarks, error in 
      //Do stuff here 
      //Dispatch the next request in 1 second 
      _ = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { _ in 
       self.reverseGeocodeLocation() 
      } 
     } 
    } 

    func geocodingDone() { 
     //Put your finish logic in here 
    } 

FYI는 타이머 용 블록 구문을 사용했지만 iOS 10에서만 작동합니다. iOS 9 이하 버전을 사용하는 경우 선택기 버전을 사용하면 동일한 방식으로 작동합니다.

+0

감사합니다. @Josh. 코드를 테스트하고 작동합니다. –