2

郵便番号のリストを含む配列を反復処理し、geocodeAddressString 関数を呼び出してそれらを MapView にプロットしようとしています。これがコードです。

CLGeocoder *geocoder = [[CLGeocoder alloc] init];


for (int i = 0; i < [[appDelegate offersFeeds] count]; i++)
{
    NSString *plotAddress = [[[appDelegate offersFeeds] objectAtIndex:i] valueForKey:@"addressline"];


    [geocoder geocodeAddressString:plotAddress completionHandler:^(NSArray *placemarks, NSError *error) {
        NSLog(@"%@", plotAddress);
    }];        
}

なぜか配列の最初の郵便番号しか出力されていません。ループするとき、それらすべてがそうであると期待していたでしょう。何か案は?

4

1 に答える 1

0

CLGeocoder オブジェクトを作成すると、一度に 1 つの住所のジオコーディングにのみ使用できます。複数の並列リクエストが必要な場合は、リクエストごとに CLGeocoder オブジェクトを作成する必要があります。

これを行う 1 つの方法を次に示します (ARC が有効になっていると仮定します)。

for (int i = 0; i < [[appDelegate offersFeeds] count]; i++)
{
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    NSString *plotAddress = [[[appDelegate offersFeeds] objectAtIndex:i] valueForKey:@"addressline"];

    [geocoder geocodeAddressString:plotAddress completionHandler:^(NSArray *placemarks, NSError *error) {
        NSLog(@"%@", plotAddress);
    }];        
}

追加情報...

Apple は、一度に実行できる並列リクエストの数に制限を設けている可能性があることに注意してください。そのため、多数のリクエストを実行している場合は、ジオコーディングをバッチで実行する必要があります。

于 2013-10-26T15:13:04.840 に答える