RespondsToSelector - не работает

Я прочитал около 10 сообщений, но не нашел, что не так с моей реализацией.

Это приложение было написано для iOS 6, но обновлено до iOS7, поэтому я хочу предложить поддержку как iOS6, так и iOS7. Но если я запускаю метод iOS7-only на устройстве iOS6, он ломается. Поэтому я подумал о добавлении responsedsToSelector, чтобы проверить, что на нем установлена ​​iOS7, но по какой-то причине if всегда возвращает false.

AppDelegate.m:

if ([[UINavigationBar appearance] respondsToSelector:@selector(shadowImage)])

if ([[UINavigationBar appearance] respondsToSelector:@selector(setShadowImage:)])

Может кто-нибудь сказать мне, что я делаю не так?

Изменить: я пытался с целевым значением развертывания, установленным на iOS6 и iOS7, оба случая возвращают false.

Edit2: если я удаляю оператор if и вызываю метод, он работает так, как задумано в iOS7.

1 ответ

Решение

Вместо того, чтобы запрашивать [UINavigationBar appearance] для селектора, просто

[UINavigationBar instancesRespondToSelector:@selector(shadowImage)]

альтернативным решением может быть проверка версии iOS

if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
    NSLog(@"iOS >= 7.0");
Другие вопросы по тегам