Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 根据iOS版本调用相应的setStatusBarHidden_Iphone_Statusbar - Fatal编程技术网

Iphone 根据iOS版本调用相应的setStatusBarHidden

Iphone 根据iOS版本调用相应的setStatusBarHidden,iphone,statusbar,Iphone,Statusbar,今天我的应用程序被批准了,但我收到用户的电子邮件说它崩溃了。我知道了 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide]; 是问题所在,因为用户有固件3.1.x,此API不工作,应用程序崩溃 所以我把它换成了 if ([[[UIDevice currentDevice] systemVersion] floatValue]>=3.2)

今天我的应用程序被批准了,但我收到用户的电子邮件说它崩溃了。我知道了

[[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 with Animation不在3.0中

我是否必须检查每个API以查看它是否与我的目标操作系统一起工作


谢谢

除了将应用程序限制在>=3.2之外,这可能是最好的选择。无论如何,您的xcode应该给您一个警告,即SetStatusBarHidden withAnimation消息不受支持(“可能不响应”)。

我建议您使用以下代码片段,而不是检查操作系统的版本,而是检查选择器当前是否可用

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

不幸的是,如果您使用模拟器使用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在3.2中提供。

仅限使用

[[UIApplication sharedApplication] setStatusBarHidden:YES];
而不是

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

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

我没有收到警告,因为我将IPHONEOS_部署_目标设置为3.0,而不是基本SDK。在最新的xcode版本3.2.3中,我只看到固件4.0和3.2作为基本SDK,其他所有都丢失了。