2011-01-12 3 views
1

Я работаю с объектами NSMutableArray, которые соответствуют протоколу MKAnnotation. Мой вопрос со временем добавляет новые объекты в массив, может ли кто-нибудь сказать мне, что является предпочтительным методом для обновления аннотаций на mapView. Должен ли я искать удаление всех контактов перед добавлением обновленного массива, или мне лучше пометить/пометить существующие контакты в объекте MKAnnotation и добавить только новые (не отмеченные тегами) контакты?Обновление аннотаций MKMapView из обновленного массива?

ответ

6

Удаление всех контактов и добавление назад всего массива, включая новые аннотации, приведет к фликкеру и излишней перерисовке булавок, которые не изменились.

Если не требуется мерцание или по какой-либо причине необходимо полное обновление, лучше просто указать вид карты, чтобы добавить новые контакты.

После того как ваш основной массив аннотаций обновляются с новыми штырями, построить временный массив с именем говорит newAnnots, содержащие ссылки на новые аннотации в основном массиве и передать newAnnots к addAnnotations: методе зрения карты. После этого временный массив может быть отброшен.

Однако вместо использования меток для идентификации «новых» аннотаций вы можете просто проверить, существует ли объект аннотации в вашем основном массиве в массиве annotations вида карты. Например:

if (![mapView.annotations containsObject:annot_from_your_main_array]) { 
    [newAnnots addObject:annot_from_your_main_array]; 
} 

Сравнение с аннотациями массивом вида карты будет работать только тогда, когда объекты аннотаций в вашем основном массиве фактических аннотаций вы даете на вид карты в addAnnotation: или addAnnotations:. Кроме того, когда ваш основной массив «обновляется», он должен добавлять новые аннотации вместо того, чтобы перестраивать весь массив с нуля. Если это так, ссылки на аннотации не совпадают с ссылками в массиве вида карты.

То же самое применяется, если вы удаляете аннотации для обновления. Удаленные аннотации могут быть добавлены во временный список «удалить» (путем проверки того, существуют ли аннотации в массиве вида карты в вашем массиве) и переданы в removeAnnotations:.

Обратите внимание, что если вы обновите существующие координаты аннотаций в своем основном массиве, представление карты автоматически обновит местоположение булавки до тех пор, пока объект аннотации в вашем массиве реализует метод setCoordinate:.

+0

Большое спасибо, спасибо, что нашли время, чтобы написать такой углубленный ответ, очень полезный. – fuzzygoat

Смежные вопросы