已经在这里发布的许多问题中的错误是相同的,但我想原因是不同的。
我有 3 个类:MapView.m
显示地图及其绘制的图钉。Pins.m
管理所有引脚数据,并PinsCalloutAnnotationView.m
从MKAnnotationView
注释的标注扩展并管理。
我的问题在这堂课上,PinsCalloutAnnotationView.m
:
- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if (self) {
if (((Pins*)annotation).isHootPin) {
[self updateHootPin:t.hoot];
}
return self;
}
当我尝试读取属性isHootPin
时,应用程序崩溃并且我得到了这个堆栈:
[PinsCalloutAnnotationView isHootPin]: unrecognized selector sent to instance 0x203312d0
该属性在课堂上非常综合Pins
:
@property (nonatomic, readwrite)BOOL isHootPin;
和
@synthesize isHootPin;
我在创建它时设置了它的值MapView.m
pin.isHootPin=YES;
这有什么问题吗?提前谢谢。
编辑:
调用方法的类initWithAnnotation
是MapView
.
- (MKAnnotationView *)mapView:(MKMapView *)mapV viewForAnnotation:(id<MKAnnotation>)annotation
{
MKAnnotationView *annotationView;
if ([annotation isMemberOfClass:[Pins class]]) {
if (((Pins *)annotation).isHootPin) {
NSString * annotationId = @"hootpin";
annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:annotationId];
if (!annotationView) {
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationId];
}
}
}
}
如您所见,在调用之前initWithAnnotation
,我进行了测试,它是否具有isHootPin
设置为 yes 的属性,如果是,我调用initWithAnnotation
。即使在 中initWithAnnotation
,我也需要确定注释isHootPin
是否是。如果是,我为注释做一个特定的布局配置。所以:
- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if (self) {
if (((Pins*)annotation).isHootPin) {//Try to check, but get crash and exception
[self updateHootPin:t.hoot];
}
return self;
}