Pregunta

He hecho una clase MKAnnotation encargo, MapLocation. Estoy teniendo problemas para ningún ajuste o conseguir propiedades, excepto en este método para crear una MKAnnotationView. Tengo que hacer aquí, ya que se supone que debe buscar un tipo de ubicación del índice de la anotación y seleccione una de una familia de imágenes de anotación personalizada para el annotationView.

Después de numerosos intentos de creación de captadores y definidores personalizados en MapLocation.h y .m, me hierve abajo a donde no puedo incluso copiar la (obligatorio) captador, título, cambiarle el nombre a title2, y tratar de conseguir su valor de retorno. Este es mi código:

-(MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *placemarkIdentifier=@"Map Location Identifier";
NSString *str1=annotation.title;
NSString *str2=annotation.title2;
if([annotation isKindOfClass:[MapLocation class]]) {
    MKAnnotationView *annotationView=(MKAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier];
    if (annotationView==nil) {
        annotationView=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier];
    }
    else
        annotationView.annotation=annotation;


    return annotationView;
}
return nil;

}

En la línea 4, el título se devuelve correctamente, pero la llamada de la línea 5 con el método de copiado produce el mensaje de error en el tema.

Lo hice ver en la documentación de XCode, pero estoy probablemente no conseguir la forma de declarar que lo que este método lo ve. Es extraño que se ve el captador título, pero no la copia title2.

¿Fue útil?

Solución

Trate de cambiar la línea de notación de puntos a lo siguiente:

NSString *str2=[annotation title2];

y el error debería desaparecer.

Lo que pasa es que el compilador se ha dicho que es una anotación MKAnnotation. El hecho de que usted sabe lo que otros métodos que tiene es irrelevante; el compilador no es psíquica - todo lo que se sabe es que la anotación sigue el protocolo MKAnnotation, nada más. La razón por la que se ve el captador título es por culpa del título se define en MKAnnotation.

También puede solucionar este problema mediante el uso de un molde:

MapLocation *mapLocation = (MapLocation *)annotation;

Ahora, se puede decir

NSString *str2=mapLocation.title2;

porque se ha dicho que el compilador mapLocation es un obejct MapLocation.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top