2017-08-02 3 views
-2

の最初の項目のみを反復します *Studentsaddressプロパティを実行すると仮定します。しかし何らかの理由で、NSMutableArray全体を反復しているわけではなく、最初のオブジェクトだけです。for(studentArray内のidオブジェクト)は、配列

CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
    for (id obj in studentArray) { 
     if ([obj isKindOfClass:[Student class]]) { 
      Student *selectedStudent = obj; 
      [geocoder geocodeAddressString:selectedStudent.address completionHandler:^(NSArray* placemarks, NSError* error){ 
       for (CLPlacemark* aPlacemark in placemarks) 
       { 
        NSString *latDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.latitude]; 
        NSString *lngDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.longitude]; 
        NSLog(@"%@, %@",latDest1, lngDest1); 
       } 
      }]; 
     } 
    } 

私が間違っていることはありますか?アプリはクラッシュせず、配列内の4人の生徒の1人だけをチェックするだけです。 ありがとう

+1

デバッガでブレークポイントとステッピングを使用すると、何が表示されますか? – CRD

+0

@CRDアプリケーションがクラッシュしない、4の代わりにログに1組の座標を出力するだけ(配列に4人の学生がいる) – Manesh

+0

上記のコードの先頭にブレークポイントを置く。変数値を計算し、次にステップスルーします。ブロック内にブレークポイントを追加したいと思うかもしれませんが、そのステップに入ることはできません。問題が何であれ、おそらく明らかになります。 – CRD

答えて

1

ジオコーディングで次のスチューデントオブジェクトの目印が返されないようです。この問題は、ジオコード要求が多すぎるために発生している可能性があります。ジオコーディングに関するアップルのドキュメントから :

フォワードジオコーディング要求を開始した後、 は別の順方向を開始したり、逆ジオコーディング要求をしようとしないでください。ジオコーディング リクエストは各アプリのレート制限があるため、 にあまりにも多くのリクエストを作成すると、リクエストの一部が失敗する可能性があります。 最大レートを超えると、ジオコーダーは、 という値のオブジェクトを完了ハンドラーに渡します。

+1

.I.e.非同期の方法で、1つだけが飛行中であることを保証する必要があります。 OPのコードは、それが透過的に失敗する理由である後続の呼び出しによって返されるエラーを無視します。 – bbum

関連する問題