Исключение MKMapKit при использовании canShowCallout на представлении аннотации

Я пытаюсь использовать довольно простое пользовательское представление аннотации карты и выноску - представление аннотации, когда я создаю его, просто добавляет UIImageView как подпредставление к себе. Это хорошо работает.

Однако, когда я называю canShowCallout на представлении аннотации, исключение сразу выдается в MapKit после возврата представления. Конец стека похож:

#0  0x94e964e6 in objc_exception_throw
#1  0x01e26404 in -[MKOverlayView _addViewForAnnotation:]
#2  0x01e22037 in -[MKOverlayView _addViewsForAnnotations:animated:]
#3  0x01e1ddf9 in -[MKOverlayView showAddedAnnotationsAnimated:]
#4  0x01df9c0e in -[MKMapView _showAddedAnnotationsAndRouteAnimated:]
#5  0x01e0371a in -[MKMapView levelView:didLoadTile:]

Мой viewForAnnotation довольно прост:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ( ! [annotation isKindOfClass:[MyAnnotation class]] )
        return nil;

    MyAnnotationView *useView = (MyAnnotationView *)[myMapView dequeueReusableAnnotationViewWithIdentifier:@"resuseview"];
    if ( useView == nil )
    {
        useView = [[[MyAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"resuseview"] autorelease];
        useView.canShowCallout = YES;  // if commented out view appears just fine
    }
    else
    {   useView.annotation = annotation;  }

    return useView;
}

Как отмечено в коде, представление аннотации хорошо работает, как - пока я не добавляю canShowCallout, затем это отказывает в первый раз, когда карта получает представление.

5
задан Kendall Helmstetter Gelner 4 March 2010 в 08:37
поделиться

1 ответ

Оказалось, что MyAnnotation (который реализует протокол MKAnnotation) не реализует два дополнительных метода протокола:

- (NSString *)subtitle;
- (NSString *)title;

Потому что я планировал полностью настраиваемая выноска, я не думал, что мне нужно их определять - и стек вызовов не показывал нераспознанные селекторы.

Кроме того, я реализовал эти два параметра только для возврата nil, но обнаружил, что для того, чтобы аннотация действительно активировала выноску, метод title (по крайней мере) ДОЛЖЕН возвращать ненулевое значение, иначе выноска не будет представлена.

13
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: