2012-09-19 35 views
20

我試圖通過在[UIBarButtonItem appearance]上運行respondsToSelector來檢測iOS 6特定的外觀方法。然而,它總是返回NO對我來說,我指定的任何選擇: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"); 

實際使用這些方法適用於各自的iOS版本的罰款,但我似乎無法檢測哪一個是提供給我。那麼我該如何正確地做到這一點?

回答

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