0

所以我正在使用地图为每个在联系人中有地址的人添加积分,我很难弄清楚如何为未知数量的联系人设置它。现在我设置它的方式,它只是为列表中的最后一个联系人添加一个图钉。这是一些代码:地址是从地址属性设置的字符串。

if(addressProperty != nil)
       {
           [location geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
            NSMutableArray *array = [[NSMutableArray alloc]init];

            for(int a = 0; a < [placemarks count]; a++)
            {

               self.placeMarkData = [placemarks objectAtIndex:a];
                [point setCoordinate: self.placeMarkData.location.coordinate];

                [array addObject:point];
                pin.animatesDrop = YES;
                point.title = address;

                [map addAnnotations:array];
            }
                      }];
    }

因此,当我运行应用程序时,我可以看到在每个位置都设置了 pin 并移动到下一个位置,直到它在列表中的最后一个位置结束。如何为每个添加一个点?我确信这是一个简单的解决方案,但它现在正在躲避我。

4

2 回答 2

1

所有这些都必须有一个循环才能通过所有联系人。是locationCLGeocoder 吗?您不应该在同一个地理编码器上设置两个 geocodeAddressString 函数,您需要为您所做的每个地理编码初始化一个新函数(除非您确定之前的异步地理编码已经完成)。

其他四个问题:

  • point变量每次都是相同的。当您更改坐标时,该点会出现在地图上的不同位置,但它是同一个位置,因此您在任何时候都不会在地图上看到更多。
  • 因为它是异步运行的,所以您应该在块外写入和读取变量。现在两个地理编码可以同时得到响应,一个设置 self.placeMarkData 就像另一个正在从中读取 location.coordinate 一样。
  • pin用来做什么的?
  • array在填满地图之前,不要费心添加地图。如果您希望尽快将这些点显示在屏幕上,则将它们单独添加到地图中。添加整个数组,然后在数组中添加另一个东西并再次添加整个数组是一种浪费。
于 2012-10-14T09:25:19.643 回答
0

似乎是您代码中的一个简单错误。您可以尝试将[map addAnnotations:array];行移到 for 循环之外吗?

于 2012-10-14T03:34:45.687 回答