1

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

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

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

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

[mapView addAnnotation:newAnnotation];

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

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

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

4

3 回答 3

1

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

[yourMapview removeAnnotations:datasourceArray];
于 2013-01-02T06:59:00.820 回答
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]]; 
       } 
}
于 2013-01-02T05:40:10.207 回答
1

您正在修改一个数组,同时还尝试遍历它。在该循环的第一次迭代期间,i=0如果它与类匹配,则将其从注释中删除。如果您删除索引 0 处的项目,它们都会向上移动 1,因此索引 1 处的项目现在位于索引 0。但是您也增加i了 1,并且在下一个循环期间您查看索引 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* 并从那时起引用该副本。

于 2013-01-02T08:30:29.543 回答