MKUserLocation blue userLocation MKAnnotation导致应用程序在无意中触及时崩溃

tim*_*imv 5 iphone xcode mkannotation userlocation

我有MKMap一系列MKAnnotations,所有这些都是红色的,很好.我在IB中选择了"显示用户位置"并将MKAnnotation红色更改为蓝色,我的viewForAnnotation方法中有代码:

if (annotation == theMap.userLocation)
    return nil;
Run Code Online (Sandbox Code Playgroud)

一切都很好,应用程序工作正常,但如果用户无意中点击蓝色用户位置点我得到以下崩溃:

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:
Run Code Online (Sandbox Code Playgroud)

如果我删除上面的代码,一切正常,但引脚是红色的.我赞成有蓝色图标,但尚未发现崩溃的原因.任何想法,将不胜感激.谢谢.

解决了!感谢Marvin和heres代码,任何人都觉得它很有用.简而言之,我必须首先检查MKAnnotation是MyAnnotation Class还是MKUserLocation Class.

- (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;
}
Run Code Online (Sandbox Code Playgroud)

Meh*_*tri 23

对于当前用户位置,请转到MKMapView属性并在XIB中显示用户位置.

然后在控制器中实现MKMapViewDelegate并在控制器中编写此方法

-(MKAnnotationView *)mapView:(MKMapView *)pmapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;  //return nil to use default blue dot view

    if([annotation isKindOfClass:[MKAnnotationClass class]])
    {
        //Your code
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个

- (void)mapView:(MKMapView *)mapView1 didSelectAnnotationView:(MKAnnotationView *)customAnnotationView
{

    if(![annotation isKindOfClass:[MKUserLocation class]])
    {
          //Your code
    }

}
Run Code Online (Sandbox Code Playgroud)

使用此功能,您可以在用户位置看到蓝点.


Lee*_*ong 9

您将需要检查注释的类

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作..

id *annotation = view.annotation;
    if (![annotation isKindOfClass:[MKUserLocation class]]) {
//Normal Code here
}
Run Code Online (Sandbox Code Playgroud)