iPhone Dev = карты и отмена выбора аннотаций - PullRequest
0 голосов
/ 29 октября 2009

Я успешно рисую аннотации на карте, используя массив аннотаций. Я даже могу нажать на аннотацию и изменить ее цвет или изображение. Моя проблема возникает, когда пользователь выбирает вторую аннотацию, и я хочу динамически изменить цвет или изображение первого обратно на невыбранный цвет / изображение. Я могу получить массив всех аннотаций и работать через массив, но как только я пытаюсь установить цвет или изображение массива, я получаю похожую ошибку.

for (MKAnnotationView *ann in map.selectedAnnotations){ 
  if ([ann isMemberOfClass:[Place class]]) { 
    place = (Place *)ann; 
      if (currentPlaceID != place.placeID) { 
        UIImage *i = [UIImage imageNamed:@"pin.png"];
        ann.image = i; 
      }
}

приведенный выше код работает нормально, пока я не доберусь до ann.image = i; тогда это ошибки. Я получаю следующие ошибки: -

  • - [Place setImage:]: нераспознанный селектор отправлен в экземпляр 0x4514370 Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '** - [Place setImage:]: нераспознанный селектор отправлен на экземпляр 0x4514370 '

Пожалуйста, посоветуйте мне, так как я уже два дня хожу по кругу по этому вопросу !!!!

Есть идеи, как лучше всего это сделать?

спасибо заранее

Ответы [ 2 ]

0 голосов
/ 29 октября 2009

Я наконец-то понял, как это сделать. Как обычно, это не так сложно, если ты умеешь. Просто думал, что передам это.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
  {
    [super setSelected:selected animated:animated];
    NSLog(@"here I am in set selected");
    if (YES == selected)
    {
       NSLog(@"I am selected");
    }
    else 
   {
     self.backgroundColor = [UIColor clearColor];
      NSLog(@"not selected");
    }
  }
0 голосов
/ 29 октября 2009

У вас есть свойство в классе Place с названием image?

Что-то вроде ... @property (nonatomic, retain) UIImage* image; и правильно ли он синтезирован? @synthesize image;

Ошибка довольно прямолинейна, некоторый объект получает сообщение, на которое он не отвечает, а именно 'setImage', который вызывается .image.

Вот ваш код:

1. for (MKAnnotationView *ann in map.selectedAnnotations) {
2.    if ([ann isMemberOfClass:[Place class]]) {
3.        place = (Place *)ann;
4.        if (currentPlaceID != place.placeID) {
5.           UIImage *i = [UIImage imageNamed:@"pin.png"];
6.           ann.image = i;
7.        }
8.    }
9. }

Что я вижу:

  • ann - MKAnnotationView (из map.selectedAnnotations)
  • вы вписываете свою аннотацию в место в строке 3 (верно? Подкласс Place MKAnnotationView?)
  • вы правильно устанавливаете изображение для аннотации

Что это значит:

  • Если Place действительно является подклассом MKAnnotationView, вы скрыли метод setImage (каким-то образом)
  • Если Place НЕ является подклассом MKAnnotationView, вы добавили недопустимую аннотацию (обязательно), которую вы пытаетесь рассматривать как аннотацию.
...