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変数はとして宣言されていMKPinAnnotationViewますが、その行は。を作成しMKAnnotationViewます。

この行を変更します。

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

に:

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


また、注釈ビューの再利用を処理するためのelse部分 も必要です。if

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

ピンアノテーションビューをデキューし、それに加えて、技術的に間違っていたピンビューとしてアノテーションビューを割り当てています!!! それが私が推測する警告を発した理由です。これを試してみてください。問題が解決する場合があります。

-(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 に答える