回答
CLLocationCoordinate2D
是struct
,即值類型。它通過價值傳遞,這是另一種說「複製」的方式。如果你指定了它的字段(例如經度),那麼修改副本; Annotation
內部的原始coordinate
將保持不變。這就是爲什麼該財產不可轉讓。
爲了解決這個問題,你應該爲緯度和經度添加單獨的屬性,而是使用它們:
@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];
} ...
非常感謝,看來要工作100%至少沒有編譯器錯誤,我知道花括號,但它不需要是一個結構,對吧? – rokimoki 2013-03-01 16:33:50
@rokimoki這實際上是一個語法錯誤,我現在修復。感謝您指出! – dasblinkenlight 2013-03-01 16:41:45
這個想法/解決方案是你的,非常感謝。 – rokimoki 2013-03-01 16:45:00
變化:
puntoXML.coordinate.latitude = [valor floatValue];
到:
CLLocationCoordinate2D coord = puntoXML.coordinate;
coord.latitude = [valor floatValue];
puntoXML.coordinate = coord;
做了longitude
了類似的變化。另請注意,您需要將大括號添加到if
聲明中。
好的答案,一旦我問類似的問題,並得到許多downvotes :) http://stackoverflow.com/questions/13952680/why-there-is-no-api-to-directly-update-xy-height-width 。但我仍然無法找到原因。恥辱!!! – 2013-03-01 16:23:59
爲什麼我可以這樣做: 'CLLocationCoordinate2D initialLocation; initialLocation。緯度= lati; initialLocation.longitude = longi;' @AnoopVaidya有時候我會得到積分,今天是星期五,大家心情都很好 – rokimoki 2013-03-01 16:25:38
@rokimoki是的,如果你願意,你可以設置經緯度。 – rmaddy 2013-03-01 16:27:55
的問題是,您正在爲您的經度/緯度分配CLLocationCoordinate2D
的副本。
puntoXML.coorinate
返回CLLocationCoordinate2D
(副本),因此指定latitude
將不起作用。
相反,您需要創建一個完整的CLLocationCoordinate2D
與新的經度和緯度,並設置在一個地方。
EDIT更好依然爲緯度/經度提供單獨的性能,及對每個設置在coordinate
實例變量它們的價值提供自定義設定器。
- 1. MKAnnotation協議的「座標」屬性
- 2. 調用委託不可達?
- 3. C#屬性委託?
- 4. 表達式樹來拆分屬性值
- 5. Swift:當委託者類不是直接子類時,分配委託類?
- 6. 使一個類上委託的屬性
- 7. 類型安全委託屬性的getter
- 8. 屬性標題複製屬性與從MKAnnotation繼承的屬性不匹配
- 9. 如果我們可以將Lambda表達式分配給委託類型。是否將Lambda表達式轉換爲內部委託
- 10. 分配在委託
- 11. 正則表達式匹配某些屬性類的img標籤
- 12. 訪問來自單獨的委託類
- 13. 來自MKAnnotation標註的UIPopOver
- 14. c中的表達式和委託#
- 15. 行爲中的Lambda表達式委託
- 16. MKMapViewDelegate派生類和委託分配
- 17. 根據類型分配一個委託?
- 18. getting:Error:ngModel:nonassign不可分配的表達式
- 19. 表達式不可分配的錯誤
- 20. 分配IB文本字段以委託UITextField屬性
- 21. 委託方法屬性
- 22. Lambda表達式/委託賦值變量
- 23. 將委託轉換爲表達式樹
- 24. MethodInvoke委託或lambda表達式
- 25. AnyObject&不能分配給類型'CGFloat'的不可變表達式
- 26. 不.net屬性支持委託?
- 27. 在ng類中的表達式中的委託方法
- 28. 如何在自定義委託屬性上調用類方法?
- 29. 使用與委託分配
- 30. QML:委託的索引屬性不被認可的console.log()
看起來'puntoXML'是隻讀的。 – 2013-03-01 16:10:12
什麼是'puntoXML'?什麼是'勇氣'? – trojanfoe 2013-03-01 16:10:59
如圖所示:'puntoXML是MapAnnotation'類型並且是'(nonatomic,assign)',所以不是隻讀的,那麼'valor是來自解析器方法的字符串。 – rokimoki 2013-03-01 16:12:26