4

私は自分の問題をよりよく説明するためにこのスキーマを作成しました。

ここに画像の説明を入力してください

それで、私はそれを修正するために何ができますか?ありがとう=)

4

3 に答える 3

4

変化する:

puntoXML.coordinate.latitude = [valor floatValue];

に:

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

にも同様の変更を加えlongitudeます。ifまた、ステートメントに中括弧を追加する必要があることに注意してください。

于 2013-03-01T16:16:42.727 に答える
3

CLLocationCoordinate2Dstructつまり値型です。これは、「コピー」の別の言い方です。そのフィールド (経度など) を割り当てると、コピーを変更するだけです。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];
} ...
于 2013-03-01T16:16:57.980 に答える
2

CLLocationCoordinate2D問題は、緯度/経度でのコピーを割り当てていることです。

puntoXML.coorinate(コピー) を返すCLLocationCoordinate2Dため、代入latitudeは効果がありません。

代わりにCLLocationCoordinate2D、新しい緯度と経度で完全を作成し、一度に設定する必要があります。

EDITcoordinateは、緯度/経度に個別のプロパティを提供し、インスタンス変数に値を設定するそれぞれのカスタムセッターを提供することをお勧めします。

于 2013-03-01T16:18:11.893 に答える