-1

MyAnnotation問題は、mapView に注釈を表示するために作成されたメイン クラス : があることです。

@interface lieuAnnotation : MyAnnotation

@property(readonly, nonatomic) UIImage *uneImage; // I cannot access this property.

@end

lieuAnnotation新しいプロパティ ( ) を使用して、このクラスから継承する 2 番目のクラスを作成しましたUIImage

@interface MyAnnotation : NSObject<MKAnnotation> {

    // Some variables
}

// Some methods

@end

マップ上で、ピンが選択されたときに、デリゲート メソッドを呼び出す開示インジケーターを設定しました。

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view
                      calloutAccessoryControlTapped:(UIControl *)control
{
    [self detailPinVue:view]; // Personnal method
}

開示インジケータはlieuAnnotationインスタンスに対してのみ表示されることに注意してください

したがってview.annotation、インスタンスにする必要がありlieuAnnotationます。

次に、自分のプロパティにアクセスしたい:

- (void)detailPinVue:(MKAnnotationView *)view
{
    [aView addSubview:view.annotation.uneImage];
}

Xcodeが教えてくれるので、プロパティにアクセスできませuneImageん:

タイプ「id」のオブジェクトにプロパティ「uneImage」が見つかりません

しかし、私の考えでは、それは可能であるべきです!

だから私もその方法でそれにアクセスしようとしました:

lieuAnnotation *anno = [[lieuAnnotation alloc] init];
anno = view.annotation;

[aView addSubview:anno.uneImage];

しかし、うまくいきません…</p>

助けとアイデアをありがとう。

4

3 に答える 3

0

簡単な答え: プロパティにアクセスする前にキャストする必要があります (ただし、問題のオブジェクトにそのプロパティがあることを 100% 確信している場合にのみキャストしてください。そうしないと、EXC_BAD_ACCESS実行時に .

説明: 問題のオブジェクトは、idコンパイル時に型を持っているようです。idObjC のすべてのオブジェクトのジェネリック型です。すべてのクラスにuneImageプロパティがあるわけではないため、コンパイラはidオブジェクトにそのプロパティがあるかどうかを判断できません。コンパイラの考え: 「安全にプレイして、ビルドしないようにしましょう」。結論: あなたはコンパイラよりも頭がいいのです (おそらく今もそうです)。

修理:

- (void)detailPinVue:(MKAnnotationView *)view
{
    [aView addSubview: (lieuAnnotation *)view.annotation.uneImage];
}
于 2013-05-27T14:28:22.567 に答える
0

で、注釈の方法を確認してくださいMKMapView addAnnotations:。カスタム クラスのオブジェクトを追加していることを確認してください。

NSLog(@"%@", view.annotation.class);また、アノテーションの基本クラスを知るために使用できます。

ところで。キャストの方法は必要ありません。 lieuAnnotation *anno = (lieuAnnotation *)view.annotation; が正しい方法です。

于 2013-05-27T14:28:58.957 に答える