iPhone Dev = карты и отмена выбора аннотаций

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

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; тогда это ошибки. Я получаю следующие ошибки: -

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

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

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

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


person Cheryl    schedule 29.10.2009    source источник


Ответы (2)


У вас есть свойство image в классе Place?

Что-то вроде ... @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 (правильно? Размещает ли подкласс MKAnnotationView?)
  • вы правильно устанавливаете изображение для аннотации

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

  • Если Place действительно является подклассом MKAnnotationView, вы скрыли метод setImage (каким-то образом)
  • Если Place НЕ является подклассом MKAnnotationView, вы добавили недопустимую аннотацию к аннотациям (конечно), которые вы пытаетесь рассматривать как аннотацию.
person Malaxeur    schedule 29.10.2009
comment
Спасибо за ваш ответ, и я обязательно попробую это сделать, но я не думаю, что это поможет, так как изображение рисуется путем установки аннотации не по - (void) setAnnotation: (id ‹MKAnnotation›) аннотации не в месте класса. - person Cheryl; 29.10.2009
comment
Я хочу изменить изображение аннотации, а не свойство объекта места. - person Cheryl; 29.10.2009
comment
Правильно, однако вы: 1) добавляете аннотацию к месту и 2) затем отправляете ему сообщение '.setImage'. Скорее всего, это НЕ то, что вы хотите делать. (См. Правку, которая появится через минуту) - person Malaxeur; 29.10.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");
    }
  }
person Cheryl    schedule 29.10.2009