3

我继承了一个引发此警告的项目

Incompatible pointer types assigning to 'MKPinAnnotationView *' from 'MKAnnotationView *'

在这条线上

pinView=[[[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID]autorelease];
    }

我想在没有警告的情况下退回项目,所以我希望这里有人能快速回答

完整代码:

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation: (id  <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = nil; 

    NSUserDefaults *prefs=[NSUserDefaults standardUserDefaults];

    if(annotation != mapView.userLocation) 

    {

        static NSString *defaultPinID = @"com.invasivecode.pin";

        pinView = (MKPinAnnotationView *)[mapView  dequeueReusableAnnotationViewWithIdentifier:defaultPinID];


        if (!pinView) {
            pinView=[[[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID]autorelease];
        }

    }   
    pinView.animatesDrop=YES;
    [mapView.userLocation setTitle:@"I am here"];
    [mapView.userLocation setSubtitle:[prefs objectForKey:@"CurrentLocationName"]];
    return pinView;        
}

谢谢!

4

2 回答 2

3

pinView变量被声明为 anMKPinAnnotationView但该行创建一个MKAnnotationView.

更改此行:

pinView=[[[MKAnnotationView alloc]initWithAnnotation...

至:

pinView=[[[MKPinAnnotationView alloc]initWithAnnotation...


您还应该有else一部分来if处理注释视图的重用:

else
    pinView.annotation = annotation;
于 2012-05-08T13:23:42.030 回答
2

您正在对 pin 注释视图进行出队,同时您将注释视图分配为您的 pinview,这在技术上是错误的!!!这就是我猜它发出警告的原因。试试这个可能会解决你的问题。

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation: (id  <MKAnnotation>)annotation {


pinView = (MKPinAnnotationView *)[mapView  dequeueReusableAnnotationViewWithIdentifier:defaultPinID];


if (!pinView) {
        pinView=[[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID]autorelease];
    }

..........
..........

}
于 2012-05-08T13:21:14.417 回答