MKAnnotation没有在MKMapView上显示标注

时间:2011-11-20 17:49:19

标签: objective-c ios mkmapview automatic-ref-counting

我有一个MKMapView,我正在添加这样的注释:

for (NSDictionary *tmp in response)
{
    NSDictionary *places = [tmp objectForKey:@"place"];
    NSDictionary *location = [places objectForKey:@"location"];
    NSLog(@"long: %@ Lat:%@",[location objectForKey:@"longitude"], [location objectForKey:@"latitude"]);

    float longitude = [[location objectForKey:@"longitude"] floatValue];
    float latitude = [[location objectForKey:@"latitude"] floatValue];


    CLLocationCoordinate2D locationco = {latitude,longitude};
    NSString *titleString = [tmp objectForKey:@"name"];

    Place *pin = [[Place alloc] init];
    pin.coordinate = locationco;
    pin.title = titleString;
    pin.subtitle = @"A Location";

    //NSArray *annots = [[NSArray alloc] initWithObjects:pin, nil];
    //[map addAnnotations:annots];
    [map addAnnotation:pin];
    [[map viewForAnnotation:pin] setCanShowCallout:YES];
}

MKAnnotation在地图上显示正常,我可以选择它们,但不会显示标注气泡。我知道他们正在被正确选中

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    [view setCanShowCallout:YES];
    NSLog(@"Title:%@",[view.annotation description]);
}

但那只是打印出来

Title:(null)

我正在使用ARC,并且我已经在我的Place对象中设置了属性:

@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic,readwrite, copy) NSString *title;
@property (nonatomic,readwrite, copy) NSString *subtitle;

我做错了什么/失踪了? 感谢。

2 个答案:

答案 0 :(得分:41)

标注未显示,因为titlenil

由于默认地图视图实现显示了标注,因此没有必要实现viewForAnnotation来显示标注。 (但是,如果你实现它,你必须在该委托方法中设置canShowCallout而不是你现在在哪里设置它。)

即使您将canShowCallout设置为YES,如果titlenil或空白,标注仍然不会显示。

记录tmp字典。 name密钥为空或不存在。

答案 1 :(得分:9)

您需要实现MKMapViewDelegate方法mapView:viewForAnnotation:,它创建视图并返回它。在该方法中,在您计划为注释返回的视图上调用[view setCanShowCallout:YES];

因为在选择了引脚后调用了mapView:didSelectAnnotationView:,所以它对启用/禁用标注没有任何影响。