Вызов setCoordinate в 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 ответа
Документация MKAnnotation
говорит:
Аннотации, поддерживающие перетаскивание, должны реализовывать этот метод для обновления положения аннотации.
Так что метод setCoordinate:
является необязательным и реализуется только классами, которые поддерживают перетаскивание. Документация MKPlacemark
не ссылается на этот метод, поэтому он не реализован.
Поэтому вы должны создавать новый экземпляр каждый раз, когда выбираете новое здание.
Если вам не нужно специально использовать MKPlacemark
(это не похоже на то, что вы передаете nil для addressDictionary), вы можете использовать MKPointAnnotation
класс вместо.
MKPointAnnotation
инвентарь MKAnnotation
но добавляет setCoordinate
метод.