iOS 4 이전에는지도보기에 추가 된 각 MKAnnotationView
에 옵저버를 추가하여 사용자가 핀을 탭한 시점을 알았습니다.메소드의 프로토콜을 테스트하는 방법은 무엇입니까?
iOS 4.2까지 정상적으로 작동합니다. 주목해야 할 사실은 주석 뷰는 실제로 재사용되고 있으며 관찰자와 어딘지를 망칠 수 있다는 점입니다.
따라서 메서드를 MKMapViewDelegate
에서 사용할 수 있지만이 기능은 iOS 4.0 SDK에만 추가되었습니다.
호환성을 유지하기 위해 위임자에게이 메서드를 구현하고 MKMapViewDelegate
프로토콜에서이 메서드가 있는지 조건부로 확인하여 제시되지 않은 경우 해당 옵저버를 주석보기에 추가합니다. .
클래스가 nil이 아닌지 확인하는 방법과 마찬가지로 프로토콜 메소드에 대해이 작업을 수행 할 수 있습니까?
UPDATE : 다니엘 Dickison는 지적 내 대리인이 -mapview:didSelectAnnotationView:
은 4.0 장치를 구현했기 때문에
, 내가 respondsToSelector:
을 사용할 수 없습니다. 필요한 것은 해당 장치의 프로토콜에 -mapview:didSelectAnnotationView:
메서드 또는이 있는지 확인하는 것입니다. MKMapView
이 위임자의 메서드를 찾으면 해당 프로토콜을 찾습니다.
현재 실행중인 iOS 버전에 대한 테스트를 마쳤습니다. 4.0보다 높으면 MKMapView
이 해당 메소드를 찾아서 호출합니다.
if ([[[UIDevice currentDevice] systemVersion] doubleValue] < 4.0)
[self setupObserver];
원래 문제는 해결되었지만 실제 프로토콜을 어떻게 든 검사하는 것은 흥미로울 것입니다.
Chris - SEL 변수 이름으로 예약 키워드 select를 사용하지 않을 수 있습니다. – DHamrick
@DHamrick, 당신은 절대적으로 옳았습니다 ... 너무 바보 같았습니다 ... 나는 그것을 빨리 쓰고 얼굴 손바닥을 가지고있었습니다. –
"respondsToSelector"는 물을 것입니다. MKMapView가 위임자로부터 해당 메서드를 찾고 있는지 알아야합니다. –