Today my app approved, but I got emails from users says it crash. I figured out that
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide];
Is the problem, Because users have firmware 3.1.x this API is not working and app crash.
So I have replace it with
if ([[[UIDevice currentDevice] systemVersion] floatValue]>=3.2)
[[UIApplication sharedApplication] setStatusBarHidden:开发者_开发知识库YES withAnimation: UIStatusBarAnimationSlide];
else
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
My questions...
Is what I did the best solution?
Why XCODE did not warn me that SetStatusBarHidden withAnimation is not in 3.0 while I set my Traget OS firmware 3.0?
Do I have to check on every API to see if it is working with my Target OS?
Thank you
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];
Use only
[[UIApplication sharedApplication] setStatusBarHidden:YES];
instead of
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
It works with no warning
Unfortunately, if you are compiling with the 4.0 SDK using the simulator, the above solutions will give you a warning, which by default is treated as an error:
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)
So you can either set 'Treat warnings as errors' to false in the build settings, or you can use macros to conditionally include the correct code. I have my base SDK set to Device 4.0, my target os is 3.1, and am using this macro:
#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
Note that setStatusBarHidden:withAnimation came available in 3.2.
That's probably the best thing to do, other than limiting your application to >=3.2. anyways, you xcode should give you a warning that the SetStatusBarHidden withAnimation message is not supported ("may not respond to").
精彩评论