2012-09-19 16 views
20

Sto cercando di rilevare un metodo di aspetto specifico per iOS 6, eseguendo respondsToSelector su [UIBarButtonItem appearance]. Tuttavia, restituisce sempre NO per me, qualunque cosa selettore a specificare:respondsToSelector ha esito negativo per il proxy di aspetto

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

realtà usando questi metodi funziona bene sulle loro rispettive versioni di iOS, ma io non riesco a rilevare quale è a mia disposizione. Quindi, come faccio a farlo correttamente?

risposta

36

Non controllare il proxy dell'aspetto. Non puoi mai fare affidamento su questo, dato che è un proxy. Invece, controlla direttamente l'articolo che ha il nuovo metodo, in questo caso, il 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 Tu Sir sei geniale! – bgolson

Problemi correlati