Вызов соответствующей версии setStatusBarHidden для iOS

Сегодня мое приложение одобрило, но я получил сообщения от пользователей о том, что он сбой. Я понял, что

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide];

Является ли проблема, потому что у пользователей есть прошивка 3.1.x, этот API не работает и сбой приложения.

Итак, я заменил его на

    if ([[[UIDevice currentDevice] systemVersion] floatValue]>=3.2)
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide];
    else 
        [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

Мои вопросы...

Я сделал лучшее решение?

Почему XCODE не предупредил меня, что SetStatusBarHidden withAnimation не входит в 3.0, когда я установил прошивку 3.0 для Traget OS?

Нужно ли проверять каждый API, чтобы увидеть, работает ли он с моей целевой ОС?

Спасибо

Ответ 1

Я бы рекомендовал использовать следующий сниппет кода вместо проверки на версию os, а лучше проверить, доступен ли селектор.

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
else 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];

Ответ 2

Использовать только

[[UIApplication sharedApplication] setStatusBarHidden:YES];

вместо

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

Он работает без предупреждения

Ответ 3

К сожалению, если вы компилируете SDK 4.0 с помощью симулятора, приведенные выше решения выдадут вам предупреждение, которое по умолчанию рассматривается как ошибка:

warning: 'setStatusBarHidden:animated:' is deprecated (declared at /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIApplication.h:267)

Таким образом, вы можете либо установить "Обработать предупреждения как ошибки" на false в настройках сборки, либо использовать макросы для условного включения правильного кода. У меня установлен базовый SDK для устройства 4.0, моя целевая ОС - 3,1, и я использую этот макрос:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
#if __IPHONE_OS_VERSION_MIN_REQUIRED > 30100
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES];
#else
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
#endif
#endif

Обратите внимание, что setStatusBarHidden: withAnimation доступно в 3.2.

Ответ 4

Это, наверное, лучшее, что можно сделать, кроме ограничения вашего приложения нa >= 3.2. в любом случае, вы xcode должны дать вам предупреждение о том, что сообщение SetStatusBarHidden withAnimation не поддерживается ( "может не отвечать на" ).