2010-06-12 66 views
10

今天我的應用獲得批准,但我收到來自用戶的電子郵件說它崩潰了。我想出根據iOS版本調用相應的setStatusBarHidden隱藏內容

[[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,而我設置了我的Traget OS固件3.0?

我必須檢查每個API,看看它是否與我的目標操作系統一起工作?

謝謝

回答

23

我建議你使用下面的代碼snipplet而不是檢查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 2010-06-14 01:38:57

1

不幸的是,如果您使用的4.0 SDK使用模擬器進行編譯時,上述解決方案會給你一個警告,默認情況下被視爲一個錯誤:

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 320來提供。

3

僅使用

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

代替

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

它的工作原理沒有警告