当我运行我的应用程序时,它崩溃了,我收到了这个错误:
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
答案 0 :(得分:2)
@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。
答案 1 :(得分:0)
如果没有代码,则无法确定错误的确切位置,但看起来您在错误的位置使用了AnnotationDisplay实例,并且尝试使用coordinate
消息发送,但不支持。< / p>
答案 2 :(得分:0)
您的AnnotationsDisplay是否符合MKAnnotation协议?
答案 3 :(得分:0)
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;
}