MKMapView setSelected:animated:第一次不工作

时间:2012-01-20 10:27:19

标签: objective-c ios cocoa-touch mkmapview

当我在注释上调用MKMapView方法setSelected:animated:时,它不起作用。但如果我下次使用不同的注释调用它,它就会开始工作。

任何人都有任何可能出错的想法? 感谢

代码(2种相关方法):

- (void)viewDidLoad {
    [super viewDidLoad];
    annotations = [[NSMutableArray arrayWithCapacity:30] retain];
    for (NSDictionary *entry in entries) {
        double lat = [[entry objectForKey:@"lat"] doubleValue];
        double lon = [[entry objectForKey:@"lon"] doubleValue];

        NSString *PLZ = [entry objectForKey:@"PLZ"];
        NSString *name = [NSString stringWithFormat:@"%@%@", PLZ.length != 0? [NSString stringWithFormat:@"%@, ", PLZ] : @"", [entry objectForKey:@"Ort"]];
        NSString *address = [NSString stringWithFormat:@"%@ - %@", [entry objectForKey:@"Grund"], [entry objectForKey:@"Zeit"]];

        CLLocationCoordinate2D coordinate;
        coordinate.latitude = lat;
        coordinate.longitude = lon;          
        MyLocation *annotation = [[[MyLocation alloc] initWithName:name address:address coordinate:coordinate] autorelease];
        [mapView addAnnotation:annotation];
        [annotations addObject:annotation];
    }

    NSLog(@"LOaded");
    [self zoomToFitMapAnnotations];
}



- (void)showAnnotation:(int)i {
    if (i <= [annotations count]) {
        [mapView setSelectedAnnotations:[NSArray arrayWithObject:[annotations objectAtIndex:i]]];
    }
}

最后一个方法showAnnotation是一个被调用的方法,它显示了一个注释。再一次,它不适用于我第一次调用的注释。不管我叫它多少次。但是如果我改变注释,那么它就会开始工作,即使是我首先调用的注释(希望这是有意义的)。

此外,这甚至是第一次有效:[mapView setSelectedAnnotations:[NSArray arrayWithObject:[annotations objectAtIndex:i]]];

2 个答案:

答案 0 :(得分:2)

你不应该自己称呼这种方法。

根据MKAnnotationView文档:

  

您不应该直接调用此方法。一个MKMapView对象调用   此方法用于响应用户与注释的交互。

而是尝试使用Dipen建议的方法(setSelectedAnnotations)。

答案 1 :(得分:1)

使用此功能可能对您有所帮助

    [mapView1 setSelectedAnnotations:[NSArray arrayWithObjects:addAnnotation,nil]];