вызов setCoordinate на MKPlacemark приводит к сбою приложения с «неопознанным селектором»

StackOverflow https://stackoverflow.com//questions/9647486

Вопрос

У меня есть 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 метод.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top