вызов setCoordinate в MKPlacemark приводит к сбою приложения с помощью «нераспознанного селектора» - PullRequest
0 голосов
/ 10 марта 2012

У меня есть MKMapView. Я добавляю одну метку MKPlace, чтобы представить местоположение здания, которое пользователь только что выбрал. Пользователь может выбрать только одно здание за раз, и я просто хочу переместить метку в новое здание, когда они выбирают новое здание. На первом здании, которое они выбирают, оно работает нормально и размещает булавку на карте. Когда я пытаюсь позвонить setCoordinate на метке, чтобы обновить положение маркера, когда они выбирают новое здание, я получаю -[MKPlacemark setCoordinate:]: unrecognized selector sent to instance

В MyViewController.h у меня есть:

@property (nonatomic, strong)MKPlacemark *selectedBuildingPlacemark;

In 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 ]

3 голосов
/ 10 марта 2012

Документация MKAnnotation гласит:

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

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

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

1 голос
/ 10 марта 2012

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

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

...