Перед iOS 4 я использовал добавление наблюдателя к каждому MKAnnotationView
, добавленному в представление карты, прислушиваясь к выбранному ему методу, поэтому я знаю, когда пользователь нажал на контакт.
Это отлично работало с iOS 4.2. Я заметил, что в выпуске замеченные аннотации на самом деле повторно используются, и это как-то мешает наблюдателям.
Итак, я полагаю, что могу использовать метод -mapview:didSelectAnnotationView:
из MKMapViewDelegate
для моих нужд, но это было добавлено только в iOS 4.0 SDK.
Итак, чтобы поддерживать совместимость, я хотел бы реализовать этот метод у своего делегата и условно проверить наличие этого метода в протоколе MKMapViewDelegate
, чтобы, если он не присутствует, я добавлю своего наблюдателя в аннотацию вид.
Как это сделать для метода протокола, аналогично тому, как мы проверяем, не класс ли nil?
UPDATE
Как отметил Даниэль Дикисон, я не могу использовать respondsToSelector:
, потому что мой делегат имеет -mapview:didSelectAnnotationView:
для 4.0+ устройств. Мне нужно проверить, имеет ли протокол на этом устройстве опционный метод -mapview:didSelectAnnotationView:
ИЛИ, если MKMapView
будет искать этот метод для делегирования.
Я закончил тест для текущей версии iOS. Если он выше 4.0, MKMapView
будет искать этот метод и вызывать его.
if ([[[UIDevice currentDevice] systemVersion] doubleValue] < 4.0)
[self setupObserver];
Это решает исходную проблему, но все равно будет интересно проверить фактический протокол для метода как-то.