2016-10-21 19 views
0

ここは私の状況です。 (Swift 2.2を使用)CLLocationのリストからの市/都市名

私は座標リスト(CLLocation)を持っています。対応するプレイス/都市を取得するにはreverseGeocodeLocationに電話する必要があります。私が要素をループしようとすると、Appleが1秒間に1回の通話を送信するように提案しているため、いくつかの呼び出しが失敗する可能性があります。だから私は同様に各呼び出しの間に遅延を追加する必要があります。

これを達成する方法はありますか?どんな助けもありがとうございます。

要求の間に少なくとも1秒で、このコードは位置のセットを宣言し、一つずつそれらを見上げ

+0

部分的に関連しています - 座標のリストはどこから来ますか?過去に取得した結果をネットワークで呼び出さないように結果をキャッシュするようにしてください。 – rmaddy

+0

@rmaddyはい、同じlatを持つ複数のアイテムがある場合、私たちは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私はTimerのブロック構文を使用しましたが、iOS 10でのみ動作します。iOS 9以前を使用している場合は、セレクタバージョンを使用するだけで同じように動作します。

+0

ありがとうございます@ジョシュ。コードをテストして動作しています。 –

関連する問題