2014-09-23 3 views
0

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

У меня есть класс MapViewAnnotation, который реализует протокол MKAnnotation, и у меня есть еще один класс MapViewController, где я программно создаю mapView и отображаю карту.

MapViewAnnotation.h:

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h> 
@interface MapViewAnnotation : NSObject <MKAnnotation> 

@property (nonatomic, copy) NSString *title; 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 

-(id) initWithTitle: (NSString *) title AndCoordinate: (CLLocationCoordinate2D) coordinate; 

@end 

MapViewAnnotation.m:

#import "MapViewAnnotation.h" 

@implementation MapViewAnnotation 

@synthesize coordinate = _coordinate; 
@synthesize title = _title; 

-(id) initWithTitle:(NSString *)title AndCoordinate:(CLLocationCoordinate2D)coordinate{ 
    self = [super init]; 
    _title = title; 
    _coordinate = coordinate; 
    return self; 
} 
@end 

MapViewController.h:

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface MapViewController : UIViewController 

@property (weak, nonatomic) MKMapView *mapView; 

-(void) goToLocation; 
@end 

MapViewController.m:

#import "MapViewController.h" 
#import "MapViewAnnotation.h" 

#define LATITUDE 42.3889; 
#define LONGITUDE -72.5278; 


@interface MapViewController() 

@end 

@implementation MapViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.mapView = [[MKMapView alloc] initWithFrame:self.view.frame]; 
    [self.view addSubview:self.mapView]; 
    [self goToLocation]; 
    [self.mapView addAnnotations:[self createAnnotations]]; 

} 


- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(void) goToLocation { 
    MKCoordinateRegion newRegion; 

    newRegion.center.latitude = LATITUDE; 
    newRegion.center.longitude = LONGITUDE; 

    newRegion.span.latitudeDelta = 0.05f; 
    newRegion.span.longitudeDelta = 0.05f; 

    self.mapView.showsPointsOfInterest = YES; 
    [self.mapView setRegion:newRegion animated:YES]; 
} 


-(NSMutableArray *) createAnnotations { 

    NSMutableArray *annotations = [[NSMutableArray alloc] init]; 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"location" ofType:@"plist"]; 

    NSArray *locations = [NSArray arrayWithContentsOfFile:path]; 

    for (NSDictionary *row in locations){ 
     NSNumber *latitude = [row objectForKey:@"latitude"]; 
     NSNumber *longitude = [row objectForKey:@"longitude"]; 
     NSString *title = [row objectForKey:@"title"]; 

     CLLocationCoordinate2D coord; 
     coord.latitude = latitude.doubleValue; 
     coord.longitude = longitude.doubleValue; 

     MapViewAnnotation *annotation = [[MapViewAnnotation alloc] initWithTitle:title AndCoordinate:coord]; 
     [annotations addObject: annotation]; 
    } 

    return annotations; 


} 
@end 

Я берусь через plist, где у меня есть координаты для одного места тестирования, которое я пытаюсь показать на моей карте, но вывод не отображается на карте. Опять же, я делаю это все программно, нет xib или раскадровки (хотя это не должно быть проблемой).

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

спасибо.

+0

Подтвердите, что createAnnotations фактически добавляет аннотации к массиву и ожидаемым координатам. Например. Прямо перед строкой '[annotations addObject ...' поместите 'NSLog (@" title =% @, lat =% f, long =% f ", title, coord.latitude, coord.longitude);'. Правильно ли он регистрирует все аннотации в plist и правильные координаты? Если журнал не является тем, что вы ожидали, проверьте, что «путь» действителен, что массив 'locations' не пуст и т. Д. – Anna

+0

Да. Он выводит правильные данные. Но я понял это благодаря вам. У меня была одна из координат на 72,32, когда она должна была быть -72,32 – mufc

ответ

0

Ответ был довольно прост,

В моем PLIST я имел координату

latitude: 42.37 
longitude: 72.536 

, когда он должен был фактически -72.536 долготы.

Смежные вопросы