地理编码方法不在for循环中第二次执行

时间:2012-09-27 07:16:23

标签: iphone ios5 clgeocoder

我已经编写了以下代码来查找国家/地区列表的坐标。

  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个可用对象

问题: 它只是第一次正常工作。但是第二次执行循环时 [geocode geo ....]方法没有调用。我不明白该怎么办?请帮忙。谢谢你,先生。

3 个答案:

答案 0 :(得分:1)

在这一行之后..

    [db insertAsiaCountry:strCountry :tempLati :tempLongi];

添加

[geoCode cancelGeocode];

即使发生错误,也可以尝试使用'for'循环

分配geoCoder

答案 1 :(得分:0)

您无法调用Method中的任何其他for loop,因为循环不会等到工作完成。在您的代码中,您在geoCode中调用了for loop方法,这是错误的。尝试调用第一个方法完成的方法。

答案 2 :(得分:0)

CLGeocoder无意在您尝试时以批处理方式使用,因此Apple服务器可能会拒绝后续请求。请查看CLGeocoder参考文档,了解如何使用它的指南。

将此数据need-a-list-of-all-countries-in-the-world复制并粘贴到电子表格中,并将其另存为csv。将此文件添加到项目中。然后你的应用程序读取文件并将注释创建为一个数组,然后将其添加到mapview中。