我已经编写了以下代码来查找国家/地区列表的坐标。
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 ....]方法没有调用。我不明白该怎么办?请帮忙。谢谢你,先生。
答案 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中。