在地图上使用PINS时,由于未捕获的异常'NSInvalidArgumentException'而终止应用程序

时间:2011-12-23 13:32:02

标签: ios mapkit xcode4.2

当我运行我的应用程序时,它崩溃了,我收到了这个错误:

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 个答案:

答案 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;
}