Невозможно вызвать функцию viewForAnnotation в MapKit - PullRequest
1 голос
/ 29 марта 2012

Я уже проверил много вопросов в StackOverflow, но ни один из них не помог мне.

Я занимаюсь разработкой приложения для iPad.Я создал все интерфейсы в раскадровке.

Для своего проекта я создал один контроллер представления и соответствующие файлы .h .m и связал их.Затем я добавил MKMapView внутри контроллера представления, после чего я сослался на mapView в файле контроллера представления с помощью Interface Builder.Я создал кучу точек и показал их на карте.

Все было идеально, пока я не решил сменить цвет булавки.Я последовал примеру MapCallout с сайта Apple Developer.Затем я создал пользовательский класс точек аннотации, как вы видите ниже

Файл CustomMKAnnotation.h

@interface CustomMKAnnotation : NSObject <MKAnnotation>
{}

Файл CustomMKAnnotation.m

@implementation CustomMKAnnotation

- (NSString *)title {return @"title";}
- (NSString *)subtitle{return @"subtitle";}

- (CLLocationCoordinate2D)coordinate;{
    CLLocationCoordinate2D theCoordinate;
    theCoordinate.latitude = some latitude;
    theCoordinate.longitude = some longitude;
    return theCoordinate; 
}
@end

Здесь мой класс viewcontroller

Файл MapHolderViewController.h

@interface MapHolderViewController : UIViewController<MKMapViewDelegate>
{
    NSMutableArray *mapAnnotations;
}
@property (nonatomic,retain) IBOutlet MKMapView *myMap;
@property (nonatomic, retain)  NSMutableArray *mapAnnotations;

-(void) addLatLong;

@end

Файл MapHolderViewController.m

@implementation MapHolderViewController

@synthesize myMap;
@synthesize mapAnnotations;

-(void) addLatLong{
    // I am adding annotations here
}
- (MKAnnotationView *)myMap:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    // This function has never been called.
}
@end

Я ссылался на выход делегата из MKMapView в ViewController.Я также установил myMap.delegate = self;в файле MapHolderViewController.m, но он тоже не работает.

Любое понимание приветствуется.

1 Ответ

1 голос
/ 29 марта 2012

Кажется, проблема в том, что ваш метод делегата назван неправильно.

Вы написали метод делегата следующим образом:

- (MKAnnotationView *)myMap:(MKMapView *)mapView 
    viewForAnnotation:(id <MKAnnotation>)annotation

Итак, ваш метод myMap:viewForAnnotation:.

Правильный заголовок:

- (MKAnnotationView *)mapView:(MKMapView *)mapView 
    viewForAnnotation:(id < MKAnnotation >)annotation

Имя метода должно быть mapView:viewForAnnotation:.

Вы можете изменить имена параметров (имена после типов параметров), но не части перед типами параметров, которые являются частью имени метода.

Например, это будет нормально:

- (MKAnnotationView *)mapView:(MKMapView *)myMap 
    viewForAnnotation:(id < MKAnnotation >)annotation
...