注释在地图上显示正常,但是当我点击一个时,我会发现这个例外:
[NSNull length]: unrecognized selector sent to instance
'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance
我的相关代码是:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *identifier = @"MyLocation";
if ([annotation isKindOfClass:[MyLocation class]]) {
MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [mapView2 dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
} else {
annotationView.annotation = annotation;
}
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
annotationView.pinColor = MKPinAnnotationColorRed;
return annotationView;
}
return nil;
}
并配置注释:
NSNumber * latitude = [[row objectAtIndex:21]objectAtIndex:1];
NSNumber * longitude = [[row objectAtIndex:21]objectAtIndex:2];
NSString * crimeDescription = [row objectAtIndex:17];
NSString * address = [row objectAtIndex:13];
CLLocationCoordinate2D coordinate;
coordinate.latitude = latitude.doubleValue;
coordinate.longitude = longitude.doubleValue;
MyLocation *annotation = [[MyLocation alloc] initWithName:crimeDescription address:address coordinate:coordinate] ;
[mapView2 addAnnotation:annotation];
在包含注释的MyLocation
类中:
- (id)initWithName:(NSString*)name address:(NSString*)address coordinate:(CLLocationCoordinate2D)coordinate {
if ((self = [super init])) {
_name = [name copy];
_address = [address copy];
_coordinate = coordinate;
}
return self;
}
答案 0 :(得分:6)
当您点按注释视图时,它会尝试获取注释length
的{{1}},以便它知道标注的宽度。
您获得的异常表示该注释的title
以某种方式设置为title
对象而不是NSNull
。
NSString
对象没有NSNull
方法,因此您会收到“无法识别的选择器”异常。
您尚未显示length
类中title
的实现方式,但我认为它会将MyLocation
设置为_name
(来自crimeDescription
}数组)创建注释时。
不知何故,row
数组中的值为row
而不是NSNull
。
如果您不需要NSString
值,则可以更改设置NSNull
数组值的代码,以便它不会放置row
s(它可以放置NSNull
1}}类似于NSString
。
另一个选项是,您可以修改@"Unknown"
类中title
的getter方法,如果MyLocation
是{{{},则返回“未知”NSString
1}}。
例如:
_name