在MKPlacemark上调用setCoordinate 应用程序崩溃与'unrecognized selector'



我有一个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方法。

相关内容

最新更新