2009-10-29 2 views
0

Я успешно рисую аннотации на карте, используя массив аннотаций. Я даже могу нажать на аннотацию и изменить ее цвет или изображение. Моя проблема возникает, когда использование выбирает вторую аннотацию, и я хочу динамически изменить цвет или изображение первого назад на не выбранный цвет/изображение. Я могу получить массив всех аннотаций и работать через массив, но как только я попытаюсь установить цвет или изображение из массива, я получаю аналогичную ошибку.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 дней теперь !!!!

Любые идеи о том, как лучше всего это сделать?

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

ответ

0

У вас есть собственность на классе Место называется изображение?

Что-то вроде ... @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. } 

Что я могу увидеть:

  • апп является MKAnnotationView (от map.selectedAnnotations)
  • вы типажи аннотации к месту в строке 3 (это правильно? Делает ли подкласс MKAnnotationView?)
  • Вы правильно устанавливаете изображение на обозначение

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

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

Спасибо за ваш ответ, и я определенно попробовать это, но я не думаю, что это поможет, как изображение рисуется путем установки аннотации не - (Недействительный) setAnnotation: (идентификатор ) аннотации не в классе. – Cheryl

+0

Я хочу изменить изображение аннотации, а не свойство объекта места. – Cheryl

+0

Правильно, однако вы 1) бросаете свою аннотацию на Место и 2), затем отправляете ей сообщение «.setImage». Это скорее всего НЕ то, что вы хотите сделать. (См. Редактирование, которое приходит через минуту) – Malaxeur

0

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

- (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"); 
    } 
    } 
Смежные вопросы