J'ai fait ce schéma afin d'expliquer mieux quels sont mes problèmes.
Alors, que puis-je faire pour le réparer? Merci =)
Le CLLocationCoordinate2D
est une struct
, c'est-à-dire un type de valeur. Il est transmis par la valeur, ce qui est une autre façon de dire "copyr". Si vous affectez ses champs (par exemple la longitude) tout ce qui ferait est de modifier une copy ; la coordinate
originale à l'intérieur de votre Annotation
restrait intacte. C'est pourquoi la propriété n'est pas assignable.
Pour résoudre ce problème, vous devez append des propriétés séparées pour la latitude et la longitude, et les utiliser à la place:
@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
Maintenant, votre code d'parsingur XML peut le faire:
if ([llave isEqualTo:@"lat"]) { puntoXML.latitude = [valor doubleValue]; } else if ([llave isEqualTo:@"lon"]) { puntoXML.longitude = [valor doubleValue]; } ...
Changement:
puntoXML.coordinate.latitude = [valor floatValue];
à:
CLLocationCoordinate2D coord = puntoXML.coordinate; coord.latitude = [valor floatValue]; puntoXML.coordinate = coord;
Apportez un changement similaire pour la longitude
. Notez également que vous devrez append des accolades aux instructions if
.
Le problème est que vous assignez une copy de CLLocationCoordinate2D
avec votre latitude / longitude.
puntoXML.coorinate
renvoie un CLLocationCoordinate2D
(une copy) de sorte que l'atsortingbution de la latitude
n'aura aucun effet.
Au lieu de cela, vous devez créer un CLLocationCoordinate2D
complet avec les nouvelles latitude et longitude et définir cela en une fois.
EDIT mieux encore fournir des propriétés séparées pour la latitude / longitude et fournir un setter personnalisé pour chacun qui définit leur valeur dans la variable d'instance de coordinate
.