我有一个MKMapView我正在添加一个MKPlacemark来表示用户刚刚选择的建筑物的位置。用户一次只能选择一个建筑物,我只想在选择新建筑物时将地标移动到新建筑物。在他们选择的第一座建筑物上,它工作正常并在地图上放置一个别针。当我尝试在地标上调用setCoordinate
来更新标记在选择新建筑物时的位置时,我得到-[MKPlacemark setCoordinate:]: unrecognized selector sent to instance
在MyViewController.h中,我有:
@property (nonatomic, strong)MKPlacemark *selectedBuildingPlacemark;
在MyViewController.m
中@synthesize selectedBuildingPlacemark;
...
if (self.selectedBuildingPlacemark == nil) {
self.selectedBuildingPlacemark = [[MKPlacemark alloc] initWithCoordinate:myCoord addressDictionary:nil];
[mapView addAnnotation:self.selectedBuildingPlacemark];
}
else {
[self.selectedBuildingPlacemark setCoordinate:myCoord];
}
我认为MKPlacemark符合MKAnnotation,因此应该实现setCoordinate
。有人能告诉我我的方式错误吗?
答案 0 :(得分:3)
MKAnnotation
的文档说:
支持拖动的注释应该实现此方法来更新注释的位置。
因此方法setCoordinate:
是可选的,仅由支持拖动的类实现。 MKPlacemark
的文档没有引用该方法,因此未实现。
因此,每次选择新建筑时都应创建一个新实例。
答案 1 :(得分:1)
如果您没有特别需要使用MKPlacemark
(因为您为addressDictionary传递了nil,它看起来不像它),您可以使用MKPointAnnotation
类。< / p>
MKPointAnnotation
实施了MKAnnotation
,但添加了setCoordinate
方法。