iPhone Dev =映射和取消选择注释

时间:2009-10-29 12:58:47

标签: iphone mapkit annotations

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

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',原因:'** - [Place setImage:]:   无法识别的选择器发送到实例0x4514370'
  •   

请告知我,因为我已经在这个圈子里转了2天了!!!!

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

提前致谢

2 个答案:

答案 0 :(得分:0)

您是否在类名为图像的地方有一个属性?

像...... @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的子类,则您为注释(肯定)添加了无效注释,并将其视为注释。

答案 1 :(得分: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");
    }
  }