2010-09-30 62 views
0

我正在嘗試遍歷所有映射註釋並檢查它是否是MKUserLocation註釋。如果不是,我想刪除它,所以我可以添加一些其他的。我試圖使用下面的代碼,但它崩潰瓦特/以下錯誤:「終止應用程序由於未捕獲的異常'NSGenericException',原因:'*收集< __NSArrayM:0x1645d0>被列舉時發生了變化。刪除註釋時的問題

for(id a in [[self mapview] annotations]) { 

    if([a class] != [MKUserLocation class]) { 

      [[self mapview] removeAnnotation:a]; 

    } 

} 

如何正確循環所有註釋並刪除它們,同時仍確保不會刪除userLocation標記。

回答

3

嘗試對annotations數組的副本進行操作,該數組仍應該可以工作。

NSArray *annotationsCopy = [self.mapView.annotations copy]; 
for(id a in annotationsCopy) { 
    if([a class] != [MKUserLocation class]) { 
      [[self mapview] removeAnnotation:a]; 
    } 
} 
[annotationsCopy release]; 

如果註釋在運行時添加到地圖視圖中,它們將不會被刪除。

看起來地圖視圖在內部使用可變數組,並且在移除對象時循環遍歷它將使其處於不可站立狀態。

+0

謝謝。這正是我需要的:) – 2010-10-01 03:09:31