Добавление аннотации на карту по значениям широты и долготы парсера - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть следующий код:

MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta=0.0005;
span.longitudeDelta=0.0005;

CLLocationCoordinate2D location = mapView.userLocation.coordinate;

for (int i = 0; i < [appDelegate.markers count]; i++) {
    marker *aMarker = [appDelegate.markers objectAtIndex:i];


location.latitude = [[aMarker.lat objectAtIndex:i] floatValue];
location.longitude =[[aMarker.lng objectAtIndex:i] floatValue];

region.span=span;
region.center=location;

if(addAnnotation != nil) 
 {
 [mapView removeAnnotation:addAnnotation];
 [addAnnotation release];
 addAnnotation = nil;
 }

 addAnnotation = [[AddressAnnotation alloc] initWithCoordinate:location];
 [mapView addAnnotation:addAnnotation]; 
}

Я проанализировал широту и долготу в моем классе XMLparser. Теперь я хочу добавить аннотацию на событие нажатия кнопки на карте. Может кто-нибудь исправить мой код?

1 Ответ

0 голосов
/ 21 сентября 2011

Предупреждение NSString may not respond to -objectAtIndex означает, что lat и lng являются NSString объектами (у которых нет метода objectAtIndex).

Вам не нужно вызывать objectAtIndex для lat и lng - они являются значениями в конкретном marker объекте, который вы только что извлекли из массива.

(Кстати, вы получаете предупреждение, когда вы компилируете код, а не когда вы "запускаете" его, как в своем комментарии. Во-вторых, не игнорируйте предупреждения компилятора. В этом случае при запуске кода вы получите исключение: NSInvalidArgumentException - unrecognized selector.)

Другая проблема - цикл удаляет ранее добавленную аннотацию перед добавлением текущей. Если вы хотите добавить все маркеры на карту, это не имеет смысла. В настоящее время будет добавлен только последний маркер на карту. Если вы действительно хотите добавить только последний маркер, вам не нужно перебирать массив (просто возьмите последний маркер из массива напрямую и создайте из него аннотацию).

Если вместо этого вы хотите добавить все маркеры на карту, цикл должен выглядеть следующим образом:

for (int i = 0; i < [appDelegate.markers count]; i++)
{
    marker *aMarker = [appDelegate.markers objectAtIndex:i];

    location.latitude = [aMarker.lat floatValue];
    location.longitude =[aMarker.lng floatValue];

    AddressAnnotation *addrAnnot = [[AddressAnnotation alloc] initWithCoordinate:location];
    [mapView addAnnotation:addrAnnot];
    [addrAnnot release];
}

Непонятно, что вы делаете с region. Если вы пытаетесь установить регион так, чтобы на карте отображались все аннотации, посмотрите на ответы на этот вопрос: Масштаб iOS MKMapView, чтобы показать все маркеры .

...