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 循环执行 [geocode geo....] 方法时没有调用。我不明白该怎么办?请帮忙。谢谢你,先生。

4

3 回答 3

1

在这条线之后..

    [db insertAsiaCountry:strCountry :tempLati :tempLongi];

添加

[geoCode cancelGeocode];

即使发生错误,尝试在“for”循环中分配 geoCoder

于 2012-09-27T08:28:00.133 回答
0

You cant call any other Method in for loop because loop doesn't wait for until the work is finished. In your code you're calling geoCode method in for loop that is wrong. Try to call that method where your first method is being finished.

于 2012-09-27T07:23:31.777 回答
0

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

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

于 2012-09-27T07:27:18.620 回答