Поиск определенного класса MKAnnotation в MKMapView

У меня есть 4-5 видов разных классов аннотаций в mapView. В следующем коде я ожидаю, что только AnnotationType1 должен отвечать на цикл for.

for (AnnotationType1* annotation in mymap.annotations) 
        {
NSLog(@"annotation class is %@", [annotation class]);
}

Но, как видно из консоли, я получаю и другие классы.

annotation class is AnnotationType1
annotation class is AnnotationType2
annotation class is AnnotationType3
annotation class is AnnotationType4

как лучше всего выполнять действия только с аннотацией AnnotationType1?


person chatur    schedule 07.01.2012    source источник


Ответы (1)


Во-первых, как вы обнаружили, быстрая итерация работает не так, как вы думали. mymap.annotations возвращает один и тот же массив объектов аннотаций, несмотря ни на что - он не имеет ни малейшего представления, к какому типу указателя вы их присваиваете.

Во-вторых, обычно считается плохой идеей полагаться на представление (например, MKMapView) для хранения данных (например, ваших аннотаций). Представление карты может знать об аннотациях — оно должно знать о них, чтобы правильно выполнять свою работу. Но я бы не рекомендовал рассчитывать на просмотр карты для поддержания состояния приложения. Возможно, у вас есть объекты аннотаций, хранящиеся где-то в вашей модели данных — если это так, было бы лучше получить список аннотаций.

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

person Caleb    schedule 07.01.2012
comment
Большое спасибо @Калеб. Это было очень полезно. У меня будут отдельные массивы для хранения различных типов аннотаций. - person chatur; 07.01.2012