2012-09-19 3 views
20

[UIBarButtonItem appearance]에서 respondsToSelector을 실행하여 iOS 6 관련 모양 메서드를 검색하려고합니다. respondsToSelector가 외양 프록시에 대해 실패합니다.

// Should show NOPE in iOS 5, YEP in iOS 6. Shows NOPE always 
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)] ? @"YEP" : @"NOPE"); 

// Should show YEP in both iOS 5 and iOS 6. Shows NOPE always 
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:barMetrics:)] ? @"YEP" : @"NOPE"); 

실제로 이러한 방법을 사용하는 아이폰 OS의 각각의 버전에서 잘 작동

,하지만 난 나에게 사용할 수있는 하나의 감지 할 수없는 것 : 그러나, 그것은 항상 내가 지정 어떤 선택, 나를 위해 NO를 반환합니다. 그러면 어떻게 제대로 할 수 있을까요?

답변

36

모양 프록시를 확인하지 마십시오. 프록시이기 때문에 결코 의지 할 수 없습니다. 대신 새 방법이있는 항목을 직접 확인하십시오.이 경우 UIBarButtonItem :

BOOL hasNewMethod = [UIBarButtonItem instancesRespondToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)]; 
if(hasNewMethod) 
    NSLog(@"Running iOS 6 with new method"); 
else 
    NSLog(@"Current OS doesn't support method..."); 
+1

+1 선생님은 훌륭합니다! – bgolson