0

已经在这里发布的许多问题中的错误是相同的,但我想原因是不同的。

我有 3 个类:MapView.m显示地图及其绘制的图钉。Pins.m管理所有引脚数据,并PinsCalloutAnnotationView.mMKAnnotationView注释的标注扩展并管理。

我的问题在这堂课上,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;

这有什么问题吗?提前谢谢。

编辑:

调用方法的类initWithAnnotationMapView.

- (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;
}
4

0 回答 0