Я видел, что некоторые другие тоже столкнулись с этой проблемой. Я пытаюсь следить за учебником онлайн, который показывает, как создавать анимированные контакты на MapView.Непризнанный селектор отправлен в экземпляр?
Я реализовал код, как показано в руководстве, и проект строит отлично, за исключением я получаю это исключение:
-[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];
}
Вот несколько частей моей «модели», которые называются Place.h/.m. Здесь я создаю свойство для 'iconN'.
@property (retain, nonatomic) NSNumber *iconN;
И вот я его синтезировать:
@synthesize iconN = _iconN;
Любая помощь очень ценится.
EDIT: Вот Place.h и Place.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
И Place.m
#import "Place.h"
@implementation Place
@synthesize coordinate;
@synthesize iconN = _iconN;
@synthesize title;
- (id)initWithLong:(CGFloat)lon Lat:(CGFloat)lat iconNumber:(NSNumber *)iconNumber {
self = [super init];
if (self) {
coordinate = CLLocationCoordinate2DMake(lat, lon);
self.iconN = iconNumber;
}
return self;
}
- (NSString *)title {
return [NSString stringWithFormat:@"Bus: %d", [self.iconN intValue]];
}
- (NSString *)subtitle {
return [NSString stringWithFormat:@"bus[%d] from database.", [self.iconN intValue] - 1];
}
@end
Я не знаком с MapKit, но то, что торчит для меня в этом: '- [MKPointAnnotation iconN]: непризнанный селектор, отправленный в экземпляр', состоит в том, что класс является' MKPointAnnotation'.Таким образом, аннотация, которую вы получаете, на самом деле не является объектом «Место», это объект «MKPointAnnotation» - вы не можете просто наложить на «Место». Я подозреваю, что корень вашей проблемы - это то, где вы создаете свой объект аннотации в первую очередь. – pmdj
Does Place реализует протокол MKAnnotation? Является ли «аннотация» своего рода местом? Другими словами, '[аннотация isKindOfClass: [Place class]]' return true? – mamills
@pmjordan Ты прибил его! Я вернулся и просмотрел свой проект. Я добавил три других аннотации, используя метод addAnnotations: 'и по какой-то причине метод setAnnotation вызывается, когда я добавлял их, даже если они не были объектами «Place». Может быть, я должен проверить, является ли объект, передаваемый сначала объектом «Место», а если нет, ничего не делать? –