удалить аннотацию удаляет случайное количество аннотаций за раз - PullRequest
1 голос
/ 30 апреля 2010

У меня есть этот код для стирания аннотаций (булавок) в моем mkmapview без стирания моей синей точки (userLocation). Проблема в том, что он стирает контакты, которые я добавил в, казалось бы, случайных числах. когда он вызывается через IBAction, он удаляет первые 5, затем снова нажимает, удаляет следующие 3, затем следующие 2, затем последний.

При нажатии мне нужно, чтобы удалить этот последний контакт ... и т. Д. и т.д.

for (int i = 0; 
     i < [mapView.annotations count]; 
     i++

     )



{ if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotation class]])
    { 
[mapView removeAnnotation:[mapView.annotations objectAtIndex:i]]; 
    } 
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2010

Проблема в том, что вы изменяете коллекцию annotation, перебирая ее. При каждом выполнении цикла условие завершения цикла [mapView.annotations count] меняет свое значение. Это приведет к непредвиденному поведению. Вы должны

  • либо поместите все аннотации, которые вы хотите удалить в пустой изменяемый массив внутри цикла, а затем вызовите removeAnnotations: с этим массивом в качестве параметра после выхода из цикла,
  • или считать вниз от аннотации с самым высоким индексом до 0.
0 голосов
/ 14 октября 2010

Используйте этот код

NSInteger *counter = [mapView.annotations count];
for (int i = 0; i < counter; i++ )  
{

    if ([[mapView.annotations objectAtIndex:i] isKindOfClass:[MyAnnotation class]]) 
    {
        [mapView removeAnnotation:[mapView.annotations objectAtIndex:i]];  
    }  
}
...