Pregunta

Estoy tratando de utilizar la propiedad "seleccionado" en MKAnnotationView (discutido aquí ), esto es para que el usuario sea capaz de eliminar una anotación ...

El siguiente fragmento de código debe encontrar el punto seleccionado en MKMapView y eliminarlo:

CSMapAnnotation *a;

for(a in [mapView annotations])
{
    if([a selected]) //Warning: 'CSMapAnnotation' may not respond to '-selected'
    {
        [mapView removeAnnotation:a];
    }
}

¿Dónde es mi encargo CSMapAnnotation Mapa de anotación define así:

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

// types of annotations for which we will provide annotation views. 
typedef enum {
    kCMapAnnotationTypeStart        = 0,
    kCMapAnnotationTypeCheckpoint   = 1,
    kCMapAnnotationTypeEnd          = 2
} CSMapAnnotationType;

@interface CSMapAnnotation : NSObject <MKAnnotation>
{
    CLLocationCoordinate2D coordinate;
    CSMapAnnotationType    annotationType;
    NSString*              title;
    NSString*              userData;
}

-(id) initWithCoordinate:(CLLocationCoordinate2D)inCoordinate 
          annotationType:(CSMapAnnotationType) annotationType
                   title:(NSString*)title;

- (BOOL) isEqualToAnnotation:(CSMapAnnotation *) anAnnotation;

@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;
@property (nonatomic, readwrite) CSMapAnnotationType    annotationType;
@property (nonatomic, retain) NSString* title;
@property (nonatomic, retain) NSString* userData;

Creo que porque no soy realmente "heredar" de MKAnnotationView, CSMapAnnotation no responderá a selected.

¿Cuál sería la mejor manera de solucionar este problema ??

¿Fue útil?

Solución

Tiene usted razón en su suposición; CSMapAnnotation ya no hereda de MKAnnotationView, y no se ha implementado la propiedad seleccionada, no va a funcionar.

Además, están manejando la relación CSMapAnnotation a MKAnnotationView para mapear la vista de anotación (el perno) a los datos almacenados en CSMapAnnotation? Recuerde que el MKAnnotationView tiene la propiedad seleccionada, no el MKAnnotation.

Si está administrando anotación a la vista de asignación correctamente, esto debería funcionar para usted:

CSMapAnnotation *a; 

for(a in [mapView selectedAnnotations])
{
    //You may want a type-check here
    [mapView removeAnnotation:a];
}

O incluso:

[mapView removeAnnotations:[mapView selectedAnnotations]];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top