MKAnnotation没有在MKMapView上显示标注

Ami*_*hah 14 objective-c mkmapview ios 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];
}
Run Code Online (Sandbox Code Playgroud)

MKAnnotation的显示在地图上罚款,我可以选择它们,但是没有出现标注泡沫.我知道他们正在被选中

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

但那只是打印出来的

Title:(null)
Run Code Online (Sandbox Code Playgroud)

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

@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic,readwrite, copy) NSString *title;
@property (nonatomic,readwrite, copy) NSString *subtitle;
Run Code Online (Sandbox Code Playgroud)

我做错了什么/错过了什么?谢谢.

小智 41

标注不会显示,因为它titlenil.

viewForAnnotation由于默认地图视图实现显示标注,因此没有必要实现显示标注.(不过,如果你这样做实现它,你必须设置canShowCallout在该委托方法,而不是在那里你正在做的事情吧.)

即使您设置canShowCalloutYES,标注仍然不会显示是否titlenil空白.

记录tmp字典.无论是name键为空或不存在.


Hen*_*mak 9

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

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