尝试获取属性值时发送到实例的无法识别的选择器

时间:2012-10-06 13:18:07

标签: ios mapkit mkannotationview

此处发布的许多问题中的错误都是一样的,但我猜原因是不同的。

我有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;

这有什么问题吗?提前完成。

修改

调用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设置为是,如果是,我会调用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;
}

0 个答案:

没有答案