UICalloutView willRemoveSubview:]: 割り当て解除されたインスタンスに送信されたメッセージ。
これは、吹き出しボタンをタップしたときにのみ発生しますが、最初のタップではなく、2回目のタップではなく、3回目のタップから発生します。そこで、カスタムAnnotationView
のコールアウト ポップをタップします。もう一度タップすると、コールアウトが表示されます。すべて問題ありません。別のものをタップすると、そのメッセージとともにブームがクラッシュします。正しいアクセサリビューがボタンに設定されている場合にのみ発生します。
心に留めておくべき 1 つの重要な側面..iOS 6 でのみ発生します... (図を参照)。
私は本当にこれにこだわっています - 助けていただければ幸いです。
if ([annotation isKindOfClass:[RE_Annotation class]])
{
RE_Annotation *myAnnotation = (RE_Annotation *)annotation;
static NSString *annotationIdentifier = @"annotationIdentifier";
RE_AnnotationView *newAnnotationView = (RE_AnnotationView *)[mapViews dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
if(newAnnotationView)
{
newAnnotationView.annotation = myAnnotation;
}
else
{
newAnnotationView = [[RE_AnnotationView alloc] initWithAnnotation:myAnnotation reuseIdentifier:annotationIdentifier];
}
return newAnnotationView;
}
return nil;
また、これは私のinitwithannotation
方法です:
- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if(self)
{
RE_Annotation *myAnnotation = annotation;
self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier];
self.frame = CGRectMake(0, 0, kWidth, kHeight);
self.backgroundColor = [UIColor clearColor];
annotationView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"map_pin_pink.png"]];
annotationView.frame = CGRectMake(0, 0, kWidth - 2 *kBorder, kHeight - 2 * kBorder);
[self addSubview:annotationView];
[annotationView setContentMode:UIViewContentModeScaleAspectFill];
self.canShowCallout = YES;
self.rightCalloutAccessoryView = [[UIButton buttonWithType:UIButtonTypeInfoLight] retain]; ///if i take it out it doesnt crash the app. if i leave it it says that message
}
return self ;
}