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”对象,如果不是,则什么也不做?