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

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];
} ...
于 2013-03-01T16:16:57.980 回答
2

问题是您正在分配CLLocationCoordinate2D带有纬度/经度的副本。

puntoXML.coorinate返回一个CLLocationCoordinate2D(副本),因此分配latitude将无效。

相反,您需要CLLocationCoordinate2D使用新的纬度和经度创建一个完整的并一次性设置。

编辑最好仍然为纬度/经度提供单独的属性,并为每个在coordinate实例变量中设置其值的自定义设置器。

于 2013-03-01T16:18:11.893 回答