Поиск определенного класса MKAnnotation в MKMapView - PullRequest
0 голосов
/ 07 января 2012

У меня есть 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?

1 Ответ

1 голос
/ 07 января 2012

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

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

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

...