2012-09-19 35 views
20

के लिए विफल रहता है [UIBarButtonItem appearance] पर respondsToSelector चलाकर मैं आईओएस 6-विशिष्ट उपस्थिति विधि का पता लगाने की कोशिश कर रहा हूं। हालांकि, यह हमेशा मेरे लिए NO देता है, जो कुछ भी चयनकर्ता मैं निर्दिष्ट करें:प्रतिसाद देता है Tooelector उपस्थिति प्रॉक्सी

// 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"); 

असल में उन तरीकों का उपयोग आईओएस के अपने-अपने संस्करण पर ठीक काम करता है, लेकिन मैं जो एक मेरे पास उपलब्ध है पता लगाने के लिए नहीं कर पा रहे। तो मैं इसे ठीक से कैसे करूं?

उत्तर

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