我有一个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
。有人能告诉我我的错误吗?
MKAnnotation
的文档说明:
支持拖动的注释应该实现此方法来更新注释的位置。
因此,方法setCoordinate:
是可选的,并且仅由支持拖动的类实现。MKPlacemark
的文档没有引用该方法,因此它没有实现。
因此,每次选择新建筑时都应该创建一个新实例。
如果您不特别需要使用MKPlacemark
(它看起来不像,因为您为addressDictionary传递了nil),则可以使用MKPointAnnotation
类。
MKPointAnnotation
实现了MKAnnotation
,但添加了setCoordinate
方法。