#iphone #annotations #nsarray #android-mapview
#iPhone #аннотации #nsarray #android-mapview
Вопрос:
Приведенный ниже код — это то, что я использовал до сих пор, и он правильно перебирает каждый объект в массиве, но когда я пытаюсь отобразить их все на одной карте, он добавляет на карту только последний объект в массиве, а не все 20 или около того, которые я хочу отобразить.
self.clientTable = [ClientDatabase database].clientTable;
ClientTable *info = nil;
[_nameLabel setText:info.name];
[_stateLabel setText:info.state];
//change the string to doubles for the map GPS co-ordinates
double latDouble = [info.latMap doubleValue];
double longDouble = [info.longMap doubleValue];
NSLog(@"%d",[self.clientTable count]);
int countArray = [self.clientTable count];
for (int i=0;i<countArray;i ) {
info = [self.clientTable objectAtIndex:i];
info.uniqueId=i;
NSLog(@" i = %d ; id = %d %@",i, info.uniqueId, info.name);
//set up the map
[super viewDidLoad];
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
MKCoordinateRegion region = {{0.0,0.0},{0.0,0.0}};
region.center.latitude = latDouble;
region.center.longitude = longDouble;
region.span.longitudeDelta =0.02; //degrees of acuracy, most precise best for this time
region.span.latitudeDelta =0.02; //degrees of accuracy
[mapView setRegion:region animated:YES];
// set up the annotation point
AllMap *annotationPoint = [[AllMap alloc] init];
annotationPoint.title = info.name;
annotationPoint.subtitle = info.state;
annotationPoint.coordinate = region.center;
[mapView addAnnotation:annotationPoint];
annotationPoint.isAccessibilityElement=YES;
//show annotation by default
[mapView selectAnnotation:annotationPoint animated:YES];
[mapView setDelegate:self];
}
Извините, если код вздорный, я новичок в программировании для iPhone.
Заранее спасибо: D
Ответ №1:
Похоже, что вы вызываете [super viewDidLoad]
внутри своего for
цикла, что, вероятно, сбрасывает массив аннотаций MapView. Этот метод должен вызываться только один раз, поэтому, если вы переместите его перед for
оператором, вы можете получить лучшие результаты.
Комментарии:
1. Как отмечает Аарон, другие вещи, которые вы делаете внутри
for
цикла для настройки MapView, на самом деле не нужно выполнять 20 раз, но это вызов,[super viewDidLoad]
который отключает ваши аннотации. Действительно, все между// set up the map
и// set up the annotation point
должно быть перемещено за пределы цикла for .2. Но две строки: region.center.latitude = latDouble; и region.center.longitude = longDouble; это то, что определяет широту и длину для каждого объекта массива? Я попробую, спасибо!
Ответ №2:
почему вы настраиваете карту внутри цикла, в котором вы создаете аннотации?
вот старая публикация в блоге, но она охватывает основы и должна вернуть вас в нужное русло
Комментарии:
1. я сделал это, поскольку думал, что если я создам аннотацию для каждого идентификатора, то она будет создавать новую для каждой итерации цикла, но она просто переопределяет ее до тех пор, пока не будет достигнута последняя, а затем покажет это. вы также забыли прикрепить ссылку. Спасибо!