Iphone 已将无法识别的选择器发送到实例?

Iphone 已将无法识别的选择器发送到实例?,iphone,objective-c,xcode,ios5,mapkit,Iphone,Objective C,Xcode,Ios5,Mapkit,我看到其他一些人也有这个问题。 我正在尝试在线学习一个教程,该教程演示了如何在地图视图上创建动画图钉 我已经实现了教程中所示的代码,项目构建良好,但我收到以下异常: -[MKPointAnnotation iconN]: unrecognized selector sent to instance 我有一个子类“MKPinAnnotationView”,并在.m文件中创建了此方法: - (void)setAnnotation:(id<MKAnnotation>)annotation

我看到其他一些人也有这个问题。 我正在尝试在线学习一个教程,该教程演示了如何在地图视图上创建动画图钉

我已经实现了教程中所示的代码,项目构建良好,但我收到以下异常:

-[MKPointAnnotation iconN]: unrecognized selector sent to instance
我有一个子类“MKPinAnnotationView”,并在.m文件中创建了此方法:

- (void)setAnnotation:(id<MKAnnotation>)annotation {
    [super setAnnotation:annotation];

    //Place *place = [[Place alloc] init];
    Place *place = (Place *)annotation;


    //The following line is where the program sends "SIGABRT"
    icon = [UIImage imageNamed:[NSString stringWithFormat:@"pin_%d.png", [place.iconN intValue]]];
    [iconView setImage:icon];
}
在这里我综合了它:

@synthesize iconN = _iconN;
非常感谢您的帮助

编辑: 这是地方。h和地方。m

#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>


@interface Place : NSObject <MKAnnotation> {
    CLLocationCoordinate2D coordinate;
    NSString *title;
}

@property (retain, nonatomic) NSNumber *iconN;
@property (nonatomic, copy) NSString *title;
@property (nonatomic) CLLocationCoordinate2D coordinate;

- (id)initWithLong:(CGFloat)lon Lat:(CGFloat)lat iconNumber:(NSNumber *)iconNumber;

@end

您不能仅通过强制转换将
MKAnnotation
转换为
Place
。这条线错了

Place *place = (Place *)annotation;

如果您仍然被卡住,您应该发布
Place.h
Place.m
文件。您需要在新的Place对象上设置iconN属性,或者在Place类中创建一个init方法,该方法接受
MKAnnotation
对象作为参数,并相应地设置它自己的内部值。

您不能通过强制转换将
MKAnnotation
转换为
Place
。这条线错了

Place *place = (Place *)annotation;

如果您仍然被卡住,您应该发布
Place.h
Place.m
文件。您需要在新的Place对象上设置iconN属性,或者在Place类中创建一个init方法,该方法接受
MKAnnotation
对象作为参数,并相应地设置它自己的内部值。

您正在将消息发送到注释,但您似乎在注释视图中有子类

您正在将消息发送到批注,但似乎在批注视图中有子类

排队

Place *place = (Place *)annotation;
如果具有注释变量类(MKPointAnnotation)的变量位置,则不能以这种方式将主类变量带到子类。相反,您必须为Place from MKPointAnnotation创建一个构造函数,并在setAnnotation方法中执行一个检查,检查注释是否为MKPointAnnotation。

在该行中

Place *place = (Place *)annotation;
如果具有注释变量类(MKPointAnnotation)的变量位置,则不能以这种方式将主类变量带到子类。相反,您必须为Place from MKPointAnnotation创建一个构造函数,并在setAnnotation方法中检查注释是否属于MKPointAnnotation。

将最初只是注释的内容作为答案发布:


我不熟悉MapKit,但在以下内容中,我看到了一件突出的事情:-[MKPointAnnotation iconN]:发送到实例的未识别选择器是类是MKPointAnnotation。因此,您接收的注释实际上不是一个Place对象,而是一个MKPointAnnotation对象-您不能只是强制转换到Place。我怀疑问题的根源在于首先创建注释对象的位置。

将最初只是一条注释的内容作为答案发布:


我不熟悉MapKit,但在以下内容中,我看到了一件突出的事情:-[MKPointAnnotation iconN]:发送到实例的未识别选择器是类是MKPointAnnotation。因此,您接收的注释实际上不是一个Place对象,而是一个MKPointAnnotation对象-您不能只是强制转换到Place。我怀疑问题的根源是您首先在哪里创建注释对象。

我不熟悉MapKit,但我最想知道的是:
-[MKPointAnnotation iconN]:发送到实例的未识别选择器是
MKPointAnnotation
。因此,您接收的注释实际上不是一个
Place
对象,它是一个
MKPointAnnotation
对象-您不能仅将其强制转换到
Place
。我怀疑问题的根源在于您首先在何处创建注释对象。place是否实现了MKAnnotation协议?“注释”是一种地方吗?换句话说,
[annotation iskindof class:[Place class]]
会返回true吗?@pmjordan你搞定了!我回去查看了我的项目。我使用“addAnnotations:”方法添加了3个其他注释,由于某种原因,在添加注释时调用了“setAnnotation”方法,即使它们不是“Place”对象。也许我应该首先检查正在传递的对象是否是“Place”对象,如果不是,则什么也不做?我不熟悉MapKit,但在这一点上,最突出的是:
-[MKPointAnnotation iconN]:发送到实例的未识别选择器是
MKPointAnnotation
。因此,您接收的注释实际上不是一个
Place
对象,它是一个
MKPointAnnotation
对象-您不能仅将其强制转换到
Place
。我怀疑问题的根源在于您首先在何处创建注释对象。place是否实现了MKAnnotation协议?“注释”是一种地方吗?换句话说,
[annotation iskindof class:[Place class]]
会返回true吗?@pmjordan你搞定了!我回去查看了我的项目。我使用“addAnnotations:”方法添加了3个其他注释,由于某种原因,在添加注释时调用了“setAnnotation”方法,即使它们不是“Place”对象。也许我应该首先检查正在传递的对象是否是“Place”对象,如果不是,则什么也不做?