从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点(注释)保留。有任何想法吗?
答案 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 *并从那时起引用该副本。