参数类型无效:MKAnnotationView到一元表达式

时间:2013-11-19 18:14:37

标签: objective-c

#import "ViewController7.h"

@interface ViewController7 ()

@end

@implementation ViewController7
@synthesize myMap;

- (void)viewDidLoad
{ 

-(MKAnnotationView *)myMap:(MKMapView *)myMap viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *pinView =
[myMap dequeueReusableAnnotationViewWithIdentifiere:@"pinView"];


    if (!pinView)
    {
        pinView = [[MKPinAnnotationView alloc] 
 initWithAnnotation:annotation reuseIdentifier:@"pinView"];
        pinView.pinColor= MKPinAnnotationColorRed;
        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;
        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.rightCalloutAccessoryView = rightButton;
    }
    else
    {
        pinView.annotation = annotation;
    }
    return pinView;
}

[self GUmap];
[super viewDidLoad];

}
-(void) GUmap
{
myMap.mapType= MKMapTypeStandard;
MKCoordinateRegion newRegion;
newRegion.center.latitude= 000000;
newRegion.center.longitude= 00000;
newRegion.span.latitudeDelta= 000000;
newRegion.span.longitudeDelta= 000000;

CLLocationCoordinate2D coordinate;
coordinate.latitude= 00000;
coordinate.longitude= 0000000;

MKPointAnnotation *annotation = [[MKPointAnnotation alloc]init];
[annotation setCoordinate:coordinate];
[annotation setTitle:@"HI"];
[annotation setSubtitle:@"Welcome!!"];
[self.myMap removeAnnotations:self.myMap.annotations];
[self.myMap addAnnotation:annotation];

[self.myMap setRegion:newRegion animated:YES];

}




@end

除了代码 - (MKAnnotationView *)myMap之外,一切正常 它给了我错误(无效的参数类型:MKAnnotationView到一元表达式) 我尝试了一切但没有任何效果 请帮忙...谢谢

2 个答案:

答案 0 :(得分:1)

问题是您尝试将myMap:viewForAnnotation:方法放在viewDidLoad方法中。不要那样做。

应该是:

-(MKAnnotationView *)myMap:(MKMapView *)myMap viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *pinView =
[myMap dequeueReusableAnnotationViewWithIdentifiere:@"pinView"];


    if (!pinView)
    {
        pinView = [[MKPinAnnotationView alloc] 
 initWithAnnotation:annotation reuseIdentifier:@"pinView"];
        pinView.pinColor= MKPinAnnotationColorRed;
        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;
        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.rightCalloutAccessoryView = rightButton;
    }
    else
    {
        pinView.annotation = annotation;
    }
    return pinView;
}

- (void)viewDidLoad
{ 
    [self GUmap];
    [super viewDidLoad];
}

答案 1 :(得分:0)

第一个问题viewForAnnotation方法的代码是里面的 viewDidLoad方法。这就是“无效参数类型...一元表达式”错误的原因 - 编译器很困惑。

viewForAnnotation方法移到viewDidLoad之外。


修复第一个问题后,您将获得第二个问题dequeueReusableAnnotationViewWithIdentifiere是错误的方法名称。它应该是dequeueReusableAnnotationViewWithIdentifier(最后没有e)。


修复前两个后你会得到的第三个问题viewForAnnotation方法的名称是错误的。现在,它是myMap:viewForAnnotation:。委托方法必须命名为mapView:viewForAnnotation:。您可以更改内部参数的名称,但不能更改公共部分的名称。如果您不更改名称,地图视图将不会调用您的方法。


最后一期(也许)我应该指出的是,您可能需要设置实际纬度和经度以及非零范围,否则您的注释将位于大西洋。