2012-05-08 50 views
3

我繼承了這行拋出這個警告MKPinAnnotationView與MKAnnotationView

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

謝謝!

回答

3

pinView變量聲明爲MKPinAnnotationView但行創建一個MKAnnotationView

改變這一行:

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

到:

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


你也應該有一個else部分到if處理註解視圖再利用:

else 
    pinView.annotation = annotation; 
2

您正在銷售針註釋視圖,以及您正在分配註釋視圖作爲您的pinview,這在技術上是錯誤的!這就是爲什麼它發射了我猜想的警告。試試這可能會解決你的問題。

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


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


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

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

}