我试图遍历所有的映射、注释并检查它是否是MKUserLocation注释。如果不是,我想移除它,这样我就可以添加一些其他的。我试图使用下面的代码,但它崩溃了w /the以下错误:“终止应用程序由于未登录的异常'NSGenericException',原因:'* Collection <__NSArrayM: 0x1645d0>是在被枚举时发生变异的。”
for(id a in [[self mapview] annotations]) {
if([a class] != [MKUserLocation class]) {
[[self mapview] removeAnnotation:a];
}
}
我如何正确地循环遍历所有注释并删除它们,同时仍然确保不删除userLocation标记。
发布于 2010-09-30 18:30:50
尝试对注释数组的副本进行操作,该数组应该仍然工作。
NSArray *annotationsCopy = [self.mapView.annotations copy];
for(id a in annotationsCopy) {
if([a class] != [MKUserLocation class]) {
[[self mapview] removeAnnotation:a];
}
}
[annotationsCopy release];
如果在此过程中将注释添加到map视图中,则不会删除注释。
看起来,map视图在内部使用一个可变数组,在删除对象的同时循环遍历它将使其处于不可维持的状态。
https://stackoverflow.com/questions/3833478
复制相似问题