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 对象时,您一次只能使用它对一个地址进行地理编码。如果需要多个并行请求,则需要为每个请求创建一个 CLGeocoder 对象。

这是一种方法(假设启用了 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 回答