2011-02-19 12 views
5

¿Es posible eliminar todas las anotaciones en un MKMapView dado de un pinColor dado? Intento borrar todas las anotaciones (pines) introducidas por el usuario en mi mapa antes de mostrar las nuevas para una parte de mi aplicación, pero no sabía qué granular puedo ser para eliminar anotaciones ...¿Quitar anotaciones de MKMapView con un cierto pinColor?

Me gustaría simplemente eliminar todas las anotaciones que tienen pines MKPinAnnotationColorGreen (verde), pero también podría simplemente eliminar todos los pines ingresados ​​por el usuario, si hay alguna manera de poder rastrearlos.

sé yo podría simplemente hacer:

[myMapView removeAnnotations:myMapView.annotations]; 

... entonces redibujado todas las anotaciones que quiero, pero eso parece un desperdicio de recursos.

¿Algún consejo?

Respuesta

10

no soy capaz de probar esto ahora, pero ¿ha intentado:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pinColor == %d", MKPinAnnotationColorGreen]; 
[myMapView removeAnnotations:[myMapView.annotations filteredArrayUsingPredicate:predicate]]; 

En cuanto a los agregados por el usuario, puede ser necesario hacer un seguimiento de los mismo. También podría crear su propia subclase de MKPinAnnotation. En esa subclase, agregue la propiedad

@property (nonatomic, BOOL) addedByUser; 

. Puede establecer addByUser en true si fueron agregados por el usuario y luego filtrar aquellos que utilizan un enfoque similar anterior (por ejemplo, @ "addedByUser == YES").

+0

Dos ideas muy buenas: no pensé en crear otra subclase (actualmente tengo una subclase personalizada, y diferencio los tipos basados ​​en el color del pin), y esta podría ser la mejor solución en el futuro (voy a agregar más tipos de ubicaciones a medida que pasa el tiempo). – geerlingguy

+0

Terminé eliminando basado en predicados, pero tuve que usar el valor del título en lugar del pinColor, simplemente porque el pinColor no parece accesible a través de myMapView.annotaciones ... – geerlingguy

+0

Hmmm ... Estoy un poco sorprendido de que pinColor no filtrará por predicados. La documentación dice que son propiedades, por lo que esperaría que siguieran las reglas de keypath. Pero de todos modos, si no funciona, no funciona. –

0

¿Quizás guardando cada grupo de anotaciones en una matriz (NSMutableArray) de punteros a esas anotaciones y luego quitándolas solo?

+0

Eso probablemente funcionaría, pero creo que la respuesta de Matthew es un poco más adecuada para mis propósitos. – geerlingguy

Cuestiones relacionadas