私は自分の問題をよりよく説明するためにこのスキーマを作成しました。
それで、私はそれを修正するために何ができますか?ありがとう=)
私は自分の問題をよりよく説明するためにこのスキーマを作成しました。
それで、私はそれを修正するために何ができますか?ありがとう=)
変化する:
puntoXML.coordinate.latitude = [valor floatValue];
に:
CLLocationCoordinate2D coord = puntoXML.coordinate;
coord.latitude = [valor floatValue];
puntoXML.coordinate = coord;
にも同様の変更を加えlongitude
ます。if
また、ステートメントに中括弧を追加する必要があることに注意してください。
はCLLocationCoordinate2D
、struct
つまり値型です。これは、「コピー」の別の言い方です。そのフィールド (経度など) を割り当てると、コピーを変更するだけです。coordinate
内部のオリジナルAnnotation
はそのまま残ります。そのため、プロパティは割り当てられません。
これを修正するには、緯度と経度に個別のプロパティを追加し、代わりにそれらを使用する必要があります。
@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
これで、XML パーサー コードは次のようになります。
if ([llave isEqualTo:@"lat"]) {
puntoXML.latitude = [valor doubleValue];
} else if ([llave isEqualTo:@"lon"]) {
puntoXML.longitude = [valor doubleValue];
} ...
CLLocationCoordinate2D
問題は、緯度/経度でのコピーを割り当てていることです。
puntoXML.coorinate
(コピー) を返すCLLocationCoordinate2D
ため、代入latitude
は効果がありません。
代わりにCLLocationCoordinate2D
、新しい緯度と経度で完全を作成し、一度に設定する必要があります。
EDITcoordinate
は、緯度/経度に個別のプロパティを提供し、インスタンス変数に値を設定するそれぞれのカスタムセッターを提供することをお勧めします。