2013-01-02 87 views
1

從MKMapView中刪除註釋時出現問題。我已經搜索了相同的答案,但找到了很多答案,但找不到滿意答案。下面是我的代碼總結:無法從mapview中刪除所有註釋

我已經創建了我的自定義類用作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]]; 
    } 
} 

但是一些註記點仍然在地圖上。如果我添加了六個點並嘗試使用上面的代碼2刪除所有點,則mapview點(註釋)將保留。有任何想法嗎?

回答

1

只是試試這個代碼...

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

UPDATE:

也可以嘗試這個代碼...

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

:(Soryy,但它不工作 – SangamAngre

+0

@SangamAngre此代碼後,你確定你不會添加別針,並等待我會發布一些其他代碼.. –

+0

我從一個函數添加mapview點,並添加地圖上的一個按鈕爲ClearAll。當我點擊這個函數時,我正在執行代碼,兩個函數只在同一個viewController中 – SangamAngre

1

添加您的數據源陣列下面一行,並刪除所有annoation

[yourMapview removeAnnotations:datasourceArray]; 
1

你正在修改一個數組,同時也試圖循環它。在該循環的第一次迭代i=0期間,如果它與您從註釋中移除它的類相匹配。如果您刪除索引爲0的項目,則它們全都向上移動一個,因此位於索引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 檢查指標,你跳過乙

你應該嘗試以下解決方案 How to delete all Annotations on a MKMapView

而且[yourMapView註釋]不承諾在任何特定的順序返回所以每次調用它的指標可能會有所不同。如果你想通過註釋做任何循環,你最好將它保存爲一個NSArray *並且從此開始引用該複製。