エラーはすでにここに投稿された多くの質問で同じですが、原因は異なると思います。
私には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;
}