La expresión no es asignable, el atributo de coorderadas del delegado de class MKAnnotation

Hice este esquema para explicar mejor cuáles son mis problemas.

introduzca la descripción de la imagen aquí

Entonces, ¿qué puedo hacer para solucionarlo? Gracias =)

El CLLocationCoordinate2D es una struct , es decir, un tipo de valor. Se transmite por valor, que es otra forma de decir "copyr". Si asigna sus campos (por ejemplo, longitud) todo lo que haría sería modificar una copy ; la coordinate original dentro de su Annotation permanecerá intacta. Es por eso que la propiedad no es asignable.

Para solucionarlo, debe agregar properties separadas para la latitud y la longitud, y usarlas en su lugar:

 @interface Annotation : NSObject<MKAnnotation> @property (readwrite) CLLocationDegrees latitude; @property (readwrite) CLLocationDegrees longitude; @property (nonatomic,assign) CLLocationCoordinate2D coordinate; ... @end @implementation Annotation -(CLLocationDegrees) latitude { return _coordinate.latitude; } -(void)setLatitude:(CLLocationDegrees)val { _coordinate.latitude = val; } -(CLLocationDegrees) longitude{ return _coordinate.longitude; } -(void)setLongitude:(CLLocationDegrees)val { _coordinate.longitude = val; } @end 

Ahora su código de analizador XML puede hacer esto:

 if ([llave isEqualTo:@"lat"]) { puntoXML.latitude = [valor doubleValue]; } else if ([llave isEqualTo:@"lon"]) { puntoXML.longitude = [valor doubleValue]; } ... 

Cambio:

 puntoXML.coordinate.latitude = [valor floatValue]; 

a:

 CLLocationCoordinate2D coord = puntoXML.coordinate; coord.latitude = [valor floatValue]; puntoXML.coordinate = coord; 

Haga un cambio similar para la longitude . También tenga en count que necesitará agregar tirantes rizados a las sentencias if .

El problema es que está asignando una copy de CLLocationCoordinate2D con su latitud / longitud.

puntoXML.coorinate devuelve un CLLocationCoordinate2D (una copy) por lo que la asignación de latitude no tendrá ningún efecto.

En su lugar, necesita crear un CLLocationCoordinate2D completo con la nueva latitud y longitud y establecerlo de una vez.

EDITAR aún mejor proporciona properties separadas para la latitud / longitud y proporciona un configurador personalizado para cada uno que establece su valor en la variable de instancia de coordinate .