У меня проблема с использованием прямого геокодирования на iOS5 с функцией geocodeAddressString.
У меня есть MKMapView, открытый как модальное представление для отображения разных мест с данными, полученными из Интернета. Моя проблема, когда я отклоняю модальное представление, и затем открываю это снова. Со второй попытки только около половины моих аннотаций фактически размещаются на карте. С третьей попытки никто не появляется.
Я чувствую, что моя проблема здесь связана с управлением памятью и областью применения CLGeocoder, но я просто не могу понять это.
Я создаю все свои аннотации в функции ViewDidLoad контроллера представления, содержащего MapView. Вот код, который я использую для получения координат адресов:
int locationCount = 0;
for(NSDictionary *date in locations)
{
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:[NSString stringWithFormat:@"%@, %@", [date objectForKey:@"venue"], [date objectForKey:@"location"]] completionHandler:^(NSArray *placemarks, NSError *error)
{
// if we find the exact location (including the venue string), create an annotation for the map
if(placemarks && placemarks.count > 0)
{
CLPlacemark *topResult = [placemarks objectAtIndex:0];
TourAnnotation *placemarkAnnotation = [[TourAnnotation alloc] initWithLocation:topResult.location andDetails:date];
placemarkAnnotation.tag = locationCount;
[tourMap addAnnotation:placemarkAnnotation];
}
// if not place an annotation at the center of the city
else
{
[geocoder geocodeAddressString:[date objectForKey:@"location"] completionHandler:^(NSArray *placemarks, NSError *error)
{
if(placemarks && placemarks.count > 0)
{
CLPlacemark *topResult = [placemarks objectAtIndex:0];
TourAnnotation *placemarkAnnotation = [[TourAnnotation alloc] initWithLocation:topResult.location andDetails:date];
placemarkAnnotation.tag = locationCount;
[tourMap addAnnotation:placemarkAnnotation];
}
}];
}
}];
++locationCount;
}
Любые предложения будут оценены.