Me gustaría reordenar el conjunto de anotaciones que se muestran en un mapa para crear un botón siguiente / anterior para recorrer rápidamente todas las anotaciones (ordenadas por fecha) usando un iterador simple.
Por lo que veo, la matriz de anotaciones utilizada como tienda [anotaciones de mapamundi] no es mutable y, por lo tanto, no puedo reordenarlo. Intenté lo siguiente para crear una copia temporal de la matriz de anotaciones, ordenarla por fecha y volver a adjuntarla.
(mapa del mundo es mi objeto MKMapView)
//COPY
NSMutableArray *annotationSort = [[NSMutableArray alloc]initWithArray:[worldmap annotations]];
//SORT
[annotationSort sortedArrayUsingComparator:^NSComparisonResult(EventPin* obj1, EventPin* obj2) {
return [obj1.eventItemObject.eventDateBegin compare: obj2.eventItemObject.eventDateBegin];
}];
//ADDED SORTED ARRAY
[worldmap removeAnnotations:[worldmap annotations]];
[worldmap addAnnotations:annotationSort];
Esto no parece funcionar. ¿Alguna idea de cómo puedo reordenar la matriz de anotaciones MKMapKit?
Respuestas
1 para la respuesta № 1Como la respuesta en el pregunta vinculada menciona, no hay garantía de que la vista de mapa "s annotations
La propiedad conservará cualquier orden.
Además, desde el annotations
propiedad incluye el userLocation
si usted tiene showsUserLocation
activado (pero que usted no llama explícitamente addAnnotation
para), el orden de anotación no será lo que puede esperar.
No confíes en el orden de las anotaciones en la vista de mapa "s annotations
formación.
En su lugar, mantenga su propio conjunto de referencias a las anotaciones y ordénelas de la manera que desee (como su annotationSort
formación).
Pero no tiene sentido eliminarlos del mapa y agregarlos nuevamente.
Tenga en cuenta que la vista del mapa "s annotations
matriz puede contener el MKUserLocation
anotación, así que cuando construya su matriz, verifique el tipo de cada anotación antes de incluirla o acceder a propiedades personalizadas.
Sin embargo, tenga en cuenta que el código para ordenar la matriz:
[annotationSort sortedArrayUsingComparator:...
es defectuoso porque sortedArrayUsingComparator
devoluciones un NSArray
.
No ordena la matriz en el lugar.
En cambio, para ordenar un NSMutableArray
, llama a su sortUsingComparator
método.
Usando esta matriz ordenada, su aplicación puede acceder o seleccionar las anotaciones en el orden deseado.