2010-03-04 14 views
5

Sto tentando di utilizzare una vista annotazione e callout della mappa personalizzata piuttosto semplice, la vista annotazione quando la creo, ma aggiunge un UIImageView come sottoview a se stesso. Funziona beneEccezione MKMapKit quando si utilizza canShowCallout nella vista annotazione

Tuttavia, quando chiamo canShowCallout nella vista annotazione, un'eccezione viene generata in MapKit immediatamente dopo aver restituito la vista. La fine della risma assomiglia:

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

mio viewForAnnotation è piuttosto semplice:

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

Come osservato nel codice, la vista annotazione funziona bene come è - fino a quando aggiungo canShowCallout, poi si blocca la prima volta che la mappa ottiene la vista.

risposta

13

La risposta si è rivelata quella MyAnnotation (che implementa il protocollo MKAnnotation) non ha attuato i due metodi Protocollo opzionale:

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

Perché avevo programmato su un richiamo del tutto personalizzato, non ci ho pensato io necessario per definire questi - e lo stack di chiamata non ha mostrato selettori non riconosciuti. Inoltre, ho implementato questi due solo per restituire nil, ma ho scoperto che per fare in modo che un'annotazione attivi effettivamente un callout il metodo title (almeno) DEVE restituire un valore diverso da zero, altrimenti il ​​callout non sarà presentata.

+0

grazie Kendall –

Problemi correlati