0

エラーはすでにここに投稿された多くの質問で同じですが、原因は異なると思います。

私には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;
}
4

0 に答える 0