无法从mapview中删除所有注释

时间:2013-01-02 05:37:13

标签: iphone ios xcode annotations mkmapview

从MKMapView中删除注释时出现问题。我已经搜索过相同的内容并找到了很多答案,但找不到令人满意的答案。以下是我的代码摘要:

我已将自定义类创建为MyMapViewPoints并创建了一个函数

- initWithZTitle:(NSString *)title andCoordinate:(CLLocationCoordinate2D)location

每当我想添加注释时,我只需创建一个MyMapViewPoints对象和

[mapView addAnnotation:newAnnotation];

当我想删除所有mapview点(注释)时,我执行以下代码:

for (int i =0; i < [mapView.annotations count]; i++) 
{ 
    if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyMapViewPoints class]]) 
    {    
        MyMapViewPoints *obj = (MyMapViewPoints *)[mapView.annotations objectAtIndex:i];
        if(obj.type != 1)
            [mapView removeAnnotation:[mapView.annotations objectAtIndex:i]];
    } 
}

但是一些注释点仍然在地图上。如果我添加了6个点并试图删除所有使用上面的代码2 mapview点(注释)保留。有任何想法吗?

3 个答案:

答案 0 :(得分:1)

试试这段代码......

NSArray *existingpoints = mapView.annotations;
if ([existingpoints count] > 0)
    [mapView removeAnnotations:existingpoints];

<强>更新

也试试这段代码......

for (int i =0; i < [mapView.annotations count]; i++) { 
    if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyMapViewPoints class]]) {                      
         [mapView removeAnnotation:[mapView.annotations objectAtIndex:i]]; 
       } 
}

答案 1 :(得分:1)

将数据源数组添加到以下行并删除所有注释

[yourMapview removeAnnotations:datasourceArray];

答案 2 :(得分:1)

你正在修改一个数组,同时也试图遍历它。在该循环i=0的第一次迭代期间,如果它与该类匹配,则将其从注释中删除。如果删除索引0处的项目,它们都会向上移动一个,因此索引1处的项目现在处于索引0.但是您还将i增加一个,并在下一个循环中查看索引1,完全错过了现在转移到索引0的项目。

index 0 1 2 3
item  A B C D

检查索引0,删除索引0处的项目。

index 0 1 2
item  B C D

现在检查1 处的索引,您已跳过B

您应该尝试这些解决方案 How to delete all Annotations on a MKMapView

[yourMapView annotations]也不承诺以任何特定顺序返回它们,因此每次调用它时索引都可能不同。如果你想通过注释进行任何循环,最好将它保存为NSArray *并从那时起引用该副本。