ResponsesToSelector не работает для внешнего прокси
Я пытаюсь обнаружить метод внешнего вида iOS 6, выполнив respondsToSelector
в [UIBarButtonItem appearance]
. Тем не менее, он всегда возвращает NO
для меня, независимо от выбранного ящика:
// 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, но я не могу определить, какой из них доступен для меня. Итак, как правильно это сделать?
Ответы
Ответ 1
Не проверяйте прокси-сервер внешнего вида. Вы никогда не можете полагаться на это, поскольку это прокси. Вместо этого, прямо проверьте элемент, который имеет новый метод, в этом случае 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...");