Уникальность MKAnnotation


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

Я думаю о том, чтобы посмотреть на каждую аннотацию с помощью for, и если она уже есть, ничего не делать, но я думаю, что это не лучшее решение для решения этой проблемы.

Есть идеи?

Edit: в настоящее время я удаляю все из них и добавляю их снова, что создает щелчок для пользователя, то, чего я не хочу, чтобы случилось

2 2

2 ответа:

Основные Параметры

В зависимости от ситуации, возможно, проще всего просто удалить все существующие и добавить все запрошенные.

Я думаю, глядя на каждого Аннотация с ДЛЯ и если это уже там ничего не делают, но я думаю это не лучшее решение, чтобы решить этот.

У вас есть особая проблема, когда это не работает хорошо для вас?


Более Продвинутый Вариант

Возможно, еще один, более интересным вариантом было бы разбить вашу карту на сетки, как это делает Google (zoom и grid x, y) запросы от сервера должны быть специально для пространства сетки или набора пространств сетки - таким образом, вы не будете повторно запрашивать дублирующуюся информацию в первую очередь. Это также облегчит вам определение того, что уже загружено, а что нет. Вы можете предварительно запросить окружающие пространства сетки в фоновом режиме и загружать новые пространства сетки только тогда, когда пользователь прокручивает "уже загруженный" участок.

В аннотации вы можете иметь свойство хранить уникальный идентификатор, например первичный ключ. Когда вы получаете обновленные элементы, вы можете искать существующие и добавлять, если их нет.

Или

Вы можете иметь локальный изменяемый массив и хранить первичные ключи. Найдите этот массив и добавьте к нему карту, если ключей нет.

В любом случае, если пользователь продолжает панорамирование, вы в конечном итоге добавляете много аннотаций к mapview.

Убедитесь, что вы используете so что вы можете повторно использовать представления

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;