Предупреждение 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, чтобы показать все маркеры .