Подтвердить что ты не робот

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, но я не могу определить, какой из них доступен для меня. Итак, как правильно это сделать?

4b9b3361

Ответ 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...");