0

我正在尝试使用字典数组中的纬度和经度在地图上显示多个图钉。问题是它总是只显示 plist 中最后一个字典的 pin。

这是我的方法:

- (void)loadMapPins
{
MapAnnotation *annotation = [[MapAnnotation alloc] init];

for (int i=0; i<self.dataDictionary.count; i++){

    NSDictionary *dictionary = [NSDictionary dictionaryWithDictionary:[self.dataDictionary objectAtIndex:i]];

    double latitude = [[dictionary objectForKey:@"Latitude"] doubleValue];
    double longitude = [[dictionary objectForKey:@"Longitude"] doubleValue];

    CLLocationCoordinate2D coord = {.latitude =
        latitude, .longitude =  longitude};
    MKCoordinateRegion region = {coord};

    annotation.title = [dictionary objectForKey:@"Name"];
    annotation.subtitle = [dictionary objectForKey:@"Center Type"];
    annotation.coordinate = region.center;
    [mapView addAnnotation:annotation];
    }
}

我需要它通过循环并相应地在地图上放置大头针。任何帮助/示例表示赞赏。

4

1 回答 1

1

我认为您想将注释创建移动到循环中。从外观上看,您只创建了一个,然后在循环中一遍又一遍地对其进行变异。当循环完成时,对注释变量的最后修改会反映 self.dataDictionary您正在迭代的最后一项。

下面的代码在每次循环迭代时创建一个新的注解对象。

- (void)loadMapPins
{

    for (int i=0; i<self.dataDictionary.count; i++){

    NSDictionary *dictionary = [NSDictionary dictionaryWithDictionary:[self.dataDictionary objectAtIndex:i]];

    double latitude = [[dictionary objectForKey:@"Latitude"] doubleValue];
    double longitude = [[dictionary objectForKey:@"Longitude"] doubleValue];

    CLLocationCoordinate2D coord = {.latitude =
        latitude, .longitude =  longitude};
    MKCoordinateRegion region = {coord};

    MapAnnotation *annotation = [[MapAnnotation alloc] init];
    annotation.title = [dictionary objectForKey:@"Name"];
    annotation.subtitle = [dictionary objectForKey:@"Center Type"];
    annotation.coordinate = region.center;
    [mapView addAnnotation:annotation];
    }
}

希望这可以帮助,

斯科特·H

于 2012-09-18T02:48:56.160 回答