10

今天我的应用程序获得批准,但我收到用户的电子邮件说它崩溃了。我发现

[[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];

我的问题...

是我做的最好的解决方案吗?

为什么在我将 Traget OS 固件设置为 3.0 时 XCODE 没有警告我 SetStatusBarHidden withAnimation 不在 3.0 中?

我是否必须检查每个 API 以查看它是否适用于我的目标操作系统?

谢谢

4

4 回答 4

23

I'd recommend you to use the following snipplet of code instead of checking against the version of the os, rather check if a selector is currently available.

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
else 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
于 2010-06-28T07:14:24.627 回答
3

仅使用

[[UIApplication sharedApplication] setStatusBarHidden:YES];

代替

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

它可以在没有警告的情况下工作

于 2010-12-01T07:44:52.500 回答
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 设置为 Device 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 中可用。

于 2010-08-20T18:45:14.093 回答
0

除了将您的应用程序限制为 >=3.2 之外,这可能是最好的做法。无论如何,您的 xcode 应该会警告您不支持 SetStatusBarHidden withAnimation 消息(“可能无法响应”)。

于 2010-06-13T14:30:45.607 回答