向MKMapView添加未知数量的注释

时间:2012-10-14 01:53:24

标签: iphone ios mkmapview mkannotation abaddressbook

所以我正在使用地图为每个在联系人中都有地址的人添加点数,而且我有点难以确定如何为未知数量的联系人设置它。现在我设置它的方式,它只是为列表中的最后一个联系人添加一个引脚。这里有一些代码:address是一个从addressProperty设置的字符串。

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];
            }
                      }];
    }

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

2 个答案:

答案 0 :(得分:1)

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

其他四个问题:

  • point变量每次都是相同的。当您更改坐标时,该点将出现在地图上的不同位置,但它是相同的,因此您在任何时候都不会在地图上看到更多。
  • 因为它是异步运行的,所以你应该在块外写入和读取变量。现在两个地理编码可以同时获得响应,一个设置self.placeMarkData,就像另一个正在读取它的位置一样。
  • pin用于什么?
  • 在填写完成之前,不要费心将array添加到地图中。如果您想要屏幕上的点,请将它们单独添加到地图中。添加整个阵列,然后向阵列添加另一个东西并再次添加整个阵列是一种浪费。

答案 1 :(得分:0)

似乎是代码中的一个简单错误。你能尝试在for循环之外移动[map addAnnotations:array];行吗?