вызов setCoordinate на MKPlacemark приводит к сбою приложения с «неопознанным селектором»
-
10-12-2019 - |
Вопрос
У меня есть 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
(это не похоже на то, потому что вы передаете ноль для адресного словаря), вы можете использовать MKPointAnnotation
класс вместо этого.
MKPointAnnotation
реализует MKAnnotation
но добавляет setCoordinate
метод.