我尝试访问我的枚举,但是它不起作用!!!
我在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;
}