2010-03-04 16 views
5

Ich versuche, eine ziemlich einfache benutzerdefinierte Anmerkungsansicht und Callout zu verwenden - die Anmerkungsansicht, wenn ich sie erstelle, fügt nur eine UIImageView als Unteransicht hinzu. Das funktioniert gut.MKMapKit-Ausnahme bei der Verwendung von canShowCallout in der Anmerkungsansicht

Wenn ich jedoch canShowCallout in der Anmerkungsansicht aufruft, wird sofort nach dem Zurückgeben der Ansicht eine Ausnahme in MapKit ausgelöst. Das Ende des Stapels wie folgt aussieht:

#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:] 

Mein viewForAnnotation ist ziemlich einfach:

- (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; 
} 

Wie im Code angegeben, die Anmerkungsansicht funktioniert gut, ist - bis ich canShowCallout hinzufügen, dann stürzt Beim ersten Mal erhält die Karte die Ansicht.

Antwort

13

Die Antwort, die MyAnnotation entpuppte (die die MKAnnotation-Protokoll implementiert) haben die beiden Fakultativprotokoll Methoden nicht implementieren:

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

Weil ich auf einem ganz individuelle callout geplant hatte, ich habe ich nicht glaube, benötigt, um diese zu definieren - und der Aufruf-Stack zeigte keine unbekannten Selektoren.

Zusätzlich habe ich diese beiden implementiert, um nur Null zurückzugeben, aber gefunden, dass die title -Methode mindestens einen Nicht-Null-Wert zurückgeben muss, damit eine Annotation tatsächlich eine Callout aktivieren kann, sonst wird die Callout nicht sein vorgeführt.

+0

danke Kendall –

Verwandte Themen