1

MKMapViewから注釈を削除しているときに問題が発生します。私はすでに同じものを検索し、非常に多くの答えを見つけましたが、満足のいく答えを見つけることができませんでした。以下は私のコードの要約です:

カスタムクラスをMyMapViewPointsとして作成し、1つの関数を

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

注釈を追加したいときはいつでも、MyMapViewPointsのオブジェクトを1つ作成し、

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

ただし、一部の注釈ポイントはマップ上に残ります。6つのポイントを追加し、上記のコードを使用してすべてを削除しようとすると、2つのマップビューポイント(注釈)が保持されます。何か案は?

4

3 に答える 3

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

次の行にデータソース配列を追加し、すべての注釈を削除します

[yourMapview removeAnnotations:datasourceArray];
于 2013-01-02T06:59:00.820 に答える
1

配列をループしながらループしようとしているときに、配列を変更しています。そのループの最初の反復中にi=0、クラスと一致する場合は、アノテーションから削除します。インデックス0のアイテムを削除すると、すべて1つ上に移動するため、インデックス1にあったアイテムはインデックス0になります。ただし、1iつ増加し、次のループでインデックス1を見ると、完全に欠落しています。インデックス0にシフトしたアイテム。

index 0 1 2 3
item  A B C D

インデックス0を確認し、インデックス0のアイテムを削除します。

index 0 1 2
item  B C D

ここで、インデックスを1でチェックし、Bをスキップしました。

これらのソリューションを試す必要があります MKMapViewですべての注釈を削除する方法

また、[yourMapViewアノテーション]は特定の順序でそれらを返すことを約束していないため、呼び出すたびにインデックスが異なる可能性があります。注釈をループする場合は、NSArray *として保存し、それ以降、そのコピーを参照するのが最善です。

于 2013-01-02T08:30:29.543 に答える