我有MKMap
一个系列MKAnnotations
,所有这些都是红色的,这很好。我在 IB 中选择了“显示用户位置”并将其MKAnnotation
从红色更改为蓝色,我的viewForAnnotation
方法中有代码:
if (annotation == theMap.userLocation)
return nil;
一切都很好,应用程序运行良好,但如果用户无意中点击了蓝色的用户位置点,我会收到以下崩溃:
2012-02-01 20:43:47.527 AusReefNSW[27178:11603] -[MKUserLocationView setPinColor:]: unrecognized selector sent to instance 0x79b0720
2012-02-01 20:43:47.528 AusReefNSW[27178:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKUserLocationView setPinColor:]: unrecognized selector sent to instance 0x79b0720'
*** First throw call stack:
如果我删除上面的代码,一切正常,但引脚是红色的。我更喜欢有蓝色图标,但尚未发现崩溃的原因。任何想法,将不胜感激。谢谢。
解决了!感谢 Marvin 和这里的代码,以防有人发现它有用。简而言之,我必须首先检查 MKAnnotation 是属于 MyAnnotation 类还是属于 MKUserLocation 类。
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view
{
theAnnotationSelected = [[mapView selectedAnnotations] objectAtIndex:0];
if ([theAnnotationSelected isKindOfClass:[MyAnnotation class]] )
{
view.pinColor = MKPinAnnotationColorGreen;
}
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKPinAnnotationView *)view
{
if ([theAnnotationSelected isKindOfClass:[MyAnnotation class]] )
{
view.pinColor = MKPinAnnotationColorRed;
}