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