无法在MapKit中调用viewForAnnotation函数

时间:2012-03-29 04:59:27

标签: ios ipad ios5 mapkit

我已经在StackOverflow中检查了很多问题但是没有一个能为我工作。

我正在开发一个iPad应用程序。我在Storyboard中创建了所有接口。

对于我的项目,我创建了一个视图控制器和相应的.h .m文件并将它们链接起来。然后我在视图控制器中添加了MKMapView,然后使用Interface Builder在视图控制器文件中引用了mapView。我创建了一堆点并在地图上显示它们。

在我决定改变针脚颜色之前,一切都很完美。我在Apple Developer网站上关注了MapCallout示例。然后我创建了自定义注释点类,如下所示

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 个答案:

答案 0 :(得分:1)

问题似乎是你的委托方法没有正确命名。

您已经编写了这样的委托方法:

- (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