2010-06-12 1 views
10

Сегодня мое приложение одобрено, но у меня есть электронные письма от пользователей, которые говорят, что он сбой. Я понял, чтоВызов соответствующего 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 3.0?

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

Спасибо

ответ

23

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

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

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

+0

я не получил предупреждение, потому что я установил IPHONEOS_DEPLOYMENT_TARGET 3.0 не является базовым SDK. На последнем xcode версии 3.2.3 я вижу только прошивку 4.0 и 3.2 в качестве базового SDK, остальные отсутствуют. – iTarek

1

К сожалению, если вы компилируете с 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.

3

Используйте только

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

вместо

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

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