Изучение iOS MapKit - несколько контактов на карте из NSDictionary - PullRequest
2 голосов
/ 23 марта 2012

Попытка взять NSSDictionary, который содержит все мои местоположения, заголовки и субтитры, и перечислить их и добавить их в мой mapView. Первая часть выглядит хорошо;Я читаю Plist и могу получить доступ к различным частям.У меня проблемы с выполнением перечисления.

NSLog, запрашивающий заголовок, правильно сообщает об этом свойстве в консоль.

В конце концов, я не вижу контактов.Кроме того, после вызова NSLog:

NSLog(@"My %i annotations are: %@", self.mapView.annotations.count, self.mapView.annotations);

я получаю в ответ:

"My 1 annotations are: (
    "<MKPointAnnotation: 0xd0151f0>" )

, который выглядит как one ячейка памяти для one аннотация. Вздох .

Я уверен, что делаю что-то простое и неправильное, но буду признателен за любую помощь.Я искал весь день и видел некоторые вещи, которые кажутся здесь ответами, но не что-то, что помогает мне в этой конкретной конструкции.

Заранее спасибо.

Следующий код запускается в главном viewController, первый видимый метод вызывается в конце ViewDidLoad.

-(void) loadUpLocations{

NSPropertyListFormat format;
NSString *errorDesc=nil;

//make path to plist in bundle
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"locations2" ofType:@"plist"];
//fill data object with contents of file
NSData *myData = [[NSData alloc] initWithContentsOfFile:plistPath];
myLocations=[NSPropertyListSerialization propertyListFromData:myData 
                                             mutabilityOption:NSPropertyListMutableContainersAndLeaves 
                                                       format:&format
                                             errorDescription:&errorDesc];
if (!myLocations) {
    NSLog(@"Error reading Plist: %@ format: %@", errorDesc,format);
}

myAnnotation=[[MKPointAnnotation alloc]init];

for (NSString *loc in myLocations) {
    NSDictionary *value =[myLocations objectForKey:loc];

    //NSLog(@"Loc is equal to: %@",loc);

    //loop through and make annotations

    myAnnotation.coordinate = CLLocationCoordinate2DMake(
                                      [[value objectForKey:@"latitude"] doubleValue],
                                      [[value objectForKey:@"longitude"] doubleValue]);
    myAnnotation.title = [value objectForKey:@"title"];
    myAnnotation.subtitle = [value objectForKey:@"subtitle"];

    NSLog(@"%@",myAnnotation.title);
    [self.mapView addAnnotation:myAnnotation];

}

NSLog(@"My %i annotations are: %@", self.mapView.annotations.count, self.mapView.annotations);
}

- (IBAction)zoomToLocation:(id)sender {


//set center for zoom
MKCoordinateRegion region;
region.center=CLLocationCoordinate2DMake(33.75070416856952, -84.37034368515015);;

//set level of zoom
MKCoordinateSpan span;
span.latitudeDelta=.03;
span.longitudeDelta=.03;
region.span=span;


[mapView setRegion:region animated:YES];
}

// This gets called every time an annotation is in the map view

- (MKAnnotationView *)mapView:mapView viewForAnnotation:annotation{
NSLog(@"in annotationsView");


MKPinAnnotationView *myPins=[[MKPinAnnotationView alloc]
                                 initWithAnnotation:annotation 
                                 reuseIdentifier:@"myPins"];
myPins.animatesDrop=YES;
return myPins;
}

1 Ответ

2 голосов
/ 23 марта 2012

Эта строка:

myAnnotation=[[MKPointAnnotation alloc]init];

в данный момент находится вне цикла for, который создает аннотации, поэтому создается только один экземпляр объекта, и вы продолжаете изменять этот экземпляр.

Переместите этострока внутри цикла for (например, над линией, задающей координату).


Кроме того, если вы не используете ARC, добавьте [myAnnotation release]; после строки addAnnotation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...