在MKPlacemark上调用setCoordinate会使用“无法识别的选择器”崩溃应用程序

时间:2012-03-10 15:10:49

标签: objective-c mkmapview mkannotation mkplacemark

我有一个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。有人能告诉我我的方式错误吗?

2 个答案:

答案 0 :(得分:3)

MKAnnotation的文档说:

  

支持拖动的注释应该实现此方法来更新注释的位置。

因此方法setCoordinate:是可选的,仅由支持拖动的类实现。 MKPlacemark的文档没有引用该方法,因此未实现。

因此,每次选择新建筑时都应创建一个新实例。

答案 1 :(得分:1)

如果您没有特别需要使用MKPlacemark(因为您为addressDictionary传递了nil,它看起来不像它),您可以使用MKPointAnnotation类。< / p>

MKPointAnnotation实施了MKAnnotation,但添加了setCoordinate方法。