Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException» при работе с PINS на карте - PullRequest
0 голосов
/ 23 декабря 2011

Когда я запускаю свое приложение, оно падает, и я получаю эту ошибку:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AnnotationsDisplay coordinate]: unrecognized selector sent to instance 0x795bda0'

AnnotationsDisplay это класс для управления отображением PINS на карте.

РЕДАКТИРОВАТЬ: Это мой код класса AnnotationsDisplay:

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface AnnotationsDisplay : NSObject<MKAnnotation> {
    NSString *title;
    CLLocationCoordinate2D coordinate;
}
- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d;
@end

.m:

#import "AnnotationsDisplay.h"

@implementation AnnotationsDisplay
- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d {
    title = ttl;
    coordinate = c2d;
    return self;
}
@end

Ответы [ 4 ]

2 голосов
/ 23 декабря 2011
@protocol MKAnnotation <NSObject>

// Center latitude and longitude of the annotion view.
// The implementation of this property must be KVO compliant.
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

@optional

// Title and subtitle for use by selection UI.
@property (nonatomic, readonly, copy) NSString *title;
@property (nonatomic, readonly, copy) NSString *subtitle;

// Called as a result of dragging an annotation view.
- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate NS_AVAILABLE(NA, 4_0);

@end

Свойства уже объявлены в протоколе MKAnnotation. Просто добавьте @synthesize для каждого свойства.

0 голосов
/ 23 декабря 2011

Соответствует ли ваш AnnotationsDisplay протоколу MKAnnotation?

0 голосов
/ 23 декабря 2011

Метод init почти всегда должен вызывать super.
Вот пример для UITableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
    // Custom initialization

}
return self;
}

, так как вы создаете подкласс NSObject, при инициализации NSObject многое может привести ваш объект в правильное состояние.

И в вашем коде это должно быть так

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d {
self = [super init];  // init from NSObject
if (self) {
  title = ttl;
  coordinate = c2d;
}
return self;
}
0 голосов
/ 23 декабря 2011

Без кода невозможно сказать, где именно ваша ошибка, но похоже, что вы используете свой экземпляр AnnotationDisplay в неправильном месте, и его пытались отправить с сообщением coordinate, которое не поддерживается.

...