вызов 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. Может ли кто-нибудь показать мне ошибку моего пути?


person Bryce Thomas    schedule 10.03.2012    source источник
comment
Где вы устанавливаете myCoord?   -  person Kory Sharp    schedule 10.03.2012


Ответы (2)


Документация MKAnnotation говорит:

Аннотации, поддерживающие перетаскивание, должны реализовать этот метод для обновления положения аннотации.

Таким образом, метод setCoordinate: является необязательным и реализуется только классами, поддерживающими перетаскивание. Документация MKPlacemark не ссылается на этот метод, поэтому он не реализован.

Поэтому вам следует создавать новый экземпляр каждый раз, когда вы выбираете новое здание.

person sch    schedule 10.03.2012

Если вам специально не нужно использовать MKPlacemark (это не похоже на это, потому что вы передаете nil для addressDictionary), вместо этого вы можете использовать класс MKPointAnnotation.

MKPointAnnotation реализует MKAnnotation, но добавляет метод setCoordinate.

person Community    schedule 10.03.2012