我尝试访问我的枚举,但是它不起作用!!!

我在Annotation.h中创建了一个typedef枚举,然后尝试在另一个类中访问枚举的一个元素...

typedef enum
{
    AnnotationTypeMale = 0,
    AnnotationTypeFemale = 1
} AnnotationType;

@interface Annotation : NSObject <MKAnnotation>
{

    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;
    AnnotationType annotation_type;
}



@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic,retain) NSString *title;
@property (nonatomic,retain) NSString *subtitle;
@property (nonatomic,getter=getAnnotationType,setter=setAnnotationType) AnnotationType        annotation_type;

@end


这是我的Annotation.h,在我的Annotation.m中,我综合了所有内容,还包括Annotation.h ...
在我的其他课程中,我现在尝试访问AnnotationType ...

- (AnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation
 {
AnnotationView *annotationView = nil;


// determine the type of annotation, and produce the correct type of annotation view for it.
Annotation* myAnnotation = (Annotation *)annotation;



if([myAnnotation getAnnotationType] == AnnotationTypeMale)
{


if语句不起作用。.发生此错误:由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“-[MKUserLocation getAnnotationType]:无法识别的选择器已发送到实例0x5c43850”

任何解决方案??????
谢谢

最佳答案

错误显示[MKUserLocation getAnnotationType]: unrecognized selector...。这意味着viewForAnnotation方法正在尝试对MKUserLocation类型的注释调用getAnnotationType。

在您的地图视图中,必须将showsUserLocation设置为YES,这意味着除了您要添加的类型MKUserLocation的注释之外,地图还为用户的位置添加了自己的蓝点注释(类型为Annotation)。

在viewForAnnotation中,您需要先检查注释的类型,然后再尝试将其视为Annotation。由于未进行检查,因此代码尝试对每种注释类型(无论类型如何)调用getAnnotationType,但是MKUserLocation没有这种方法,因此您会得到异常。

您可以检查注释的类型是否为MKUserLocation并立即返回nil:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    //your existing code...
}


或检查注释的类型是否为Annotation并执行该特定代码:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    MKAnnotationView *annotationView = nil;

    if ([annotation isKindOfClass:[Annotation class]])
    {
        // determine the type of annotation, and produce the correct type of annotation view for it.
        Annotation* myAnnotation = (Annotation *)annotation;

        if([myAnnotation getAnnotationType] == AnnotationTypeMale)
        {
            //do something...
        }
        else
            //do something else…
    }

    return annotationView;
}

08-27 19:25