【问题标题】:calling setCoordinate on MKPlacemark crashes app with 'unrecognized selector'在 MKPlacemark 上调用 setCoordinate 会导致应用程序因“无法识别的选择器”而崩溃
【发布时间】:2012-03-10 15:10:48
【问题描述】:

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

【问题讨论】:

  • 你在哪里设置 myCoord?

标签: objective-c mkmapview mkannotation mkplacemark


【解决方案1】:

MKAnnotation 的文档说:

支持拖动的注解应该实现这个方法来更新注解的位置。

所以setCoordinate:方法是可选的,只有支持拖拽的类才能实现。 MKPlacemark的文档没有引用那个方法,所以没有实现。

所以每次选择新建筑时都应该创建一个新实例。

【讨论】:

    【解决方案2】:

    如果您不是特别需要使用 MKPlacemark(它看起来不像,因为您为 addressDictionary 传递 nil),您可以改用 MKPointAnnotation 类。

    MKPointAnnotation 实现了MKAnnotation,但添加了一个setCoordinate 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      相关资源
      最近更新 更多