0

国のリストの座標を見つけるために、次のコードを作成しました。

  int count=[objCountries.countryName count];
CLGeocoder *geoCode = [[CLGeocoder alloc] init];
for(int i=0;i<count;i++)
{
    NSString *strCountry=[[NSString alloc]initWithString:[objCountries.countryName objectAtIndex:i]];




        [geoCode geocodeAddressString:strCountry completionHandler:^(NSArray *placemarks, NSError *error)
    {
        if (!error)
        {
            CLPlacemark *place = [placemarks objectAtIndex:0];
            CLLocation *location = place.location;
            CLLocationCoordinate2D coord = location.coordinate;

            NSString *tempLati=[[NSString alloc]initWithFormat:@"%g",coord.latitude];
            NSString *tempLongi=[[NSString alloc]initWithFormat:@"%g",coord.longitude];
            NSLog(@"-------------------------");
            NSLog(@"Country : %@",strCountry);
            NSLog(@" Latitude : %@ ",tempLati);
            NSLog(@" Longitude : %@ ",tempLongi);

            [objCountries.countryLatitude addObject:tempLati];
            [objCountries.countryLongitude addObject:tempLongi];
            [db insertAsiaCountry:strCountry :tempLati :tempLongi];
        }
    }];

}

}

私のcountryName配列には、20個のオブジェクトがあります

問題: 最初から問題なく動作しています。しかし、forループが[geocodegeo....]メソッドを実行している2回目は呼び出していません。どうしたらいいのかわからない?助けてください。ありがとうございます。

4

3 に答える 3

1

この行の後..

    [db insertAsiaCountry:strCountry :tempLati :tempLongi];

追加

[geoCode cancelGeocode];

エラーが発生した場合でも、「for」ループを使用してgeoCoderを割り当ててみてください

于 2012-09-27T08:28:00.133 に答える
0

ループは作業が終了するまで待機しないため、他の人Methodを呼び出すことはできません。for loopあなたのコードでは、その中でgeoCodeメソッドを呼び出しているのfor loopは間違っています。最初のメソッドが終了しているところで、そのメソッドを呼び出してみてください。

于 2012-09-27T07:23:31.777 に答える
0

CLGeocoderは、あなたが試しているようにバッチ方式で使用することを意図していないため、後続の要求がAppleサーバーによって拒否されている可能性があります。これを使用する方法のガイドラインについては、CLGeocoderのリファレンスドキュメントを参照してください。

この世界のすべての国のリストが必要なデータをコピー してスプレッドシートに貼り付け、csvとして保存します。このファイルをプロジェクトに追加します。次に、アプリがファイルを読み取り、注釈を配列として作成し、それをマップビューに追加します。

于 2012-09-27T07:27:18.620 に答える