/ / Cómo reordenar la matriz de anotaciones MKMapView - Objective-C, anotaciones, mkmapview, mapkit

Cómo reordenar la matriz de anotaciones MKMapView: object-c, anotaciones, mkmapview, mapkit

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 № 1

Como 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.