0

我正在使用一组注释成功地在地图上绘制注释。我什至可以单击注释并更改其颜色或图像。当用户选择第二个注释并且我想将第一个注释的颜色或图像动态更改回未选择的颜色/图像时,就会出现我的问题。我可以获得所有注释的数组并通过数组工作,但是一旦我尝试设置数组的颜色或图像,我就会得到类似的错误。

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 天了!!!!

关于如何最好地做到这一点的任何想法?

提前致谢

4

2 回答 2

0

你在类 Place 上有一个名为 image 的属性吗?

像......@property (nonatomic, retain) UIImage* image;它是否正确合成?@synthesize image;?

该错误非常简单,某些对象正在接收它没有响应的消息,即由 .image 调用的“setImage”。

这是您的代码:

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 的子类,则您已将无效注释添加到您试图视为注释的注释(当然)。
于 2009-10-29T13:05:42.650 回答
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");
    }
  }
于 2009-10-29T19:23:50.807 回答