2010-06-12 3 views
10

Hoy mi aplicación ha sido aprobada, pero recibí correos electrónicos de usuarios que dicen que falla. Me di cuenta de queLlamar al setStatusBarHidden correspondiente por versión de iOS

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide]; 

es el problema, porque los usuarios tienen 3.1.x firmware esta API no está funcionando y accidente aplicación.

Así que tienen reemplazarlo con

if ([[[UIDevice currentDevice] systemVersion] floatValue]>=3.2) 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationSlide]; 
    else 
     [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 

Mis preguntas ...

es lo que hice la mejor solución?

¿Por qué XCODE no me advirtió que SetStatusBarHidden withAnimation no está en 3.0 mientras configuro mi firmware Traget OS 3.0?

¿Debo verificar todas las API para ver si funcionan con mi sistema operativo de destino?

Gracias

Respuesta

23

Le recomiendo que use el siguiente snipplet de código en lugar de verificar con la versión del sistema operativo, en lugar de comprobar si un selector está actualmente disponible.

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

Eso es probablemente lo mejor que puede hacer, aparte de limitar su aplicación a> = 3.2. de todos modos, tu xcode debería advertirte que el mensaje SetStatusBarHidden withAnimation no es compatible ("puede que no responda").

+0

No he tenido la advertencia porque me puse la IPHONEOS_DEPLOYMENT_TARGET a 3.0 SDK no BASE. En la última versión de xcode 3.2.3, solo veo firmware 4.0 y 3.2 como SDK base, faltan todos los demás. – iTarek

1

Por desgracia, si está compilando con el SDK 4.0 utilizando el simulador, las soluciones anteriores le dará una advertencia, que por defecto es tratada como un 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) 

por lo que puede establezca 'Tratar advertencias como errores' en falso en la configuración de compilación, o puede usar macros para incluir condicionalmente el código correcto. He SDK mi base de puesta a dispositivos 4.0, mi sistema operativo de destino es de 3.1, y estoy usando esta 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 

Tenga en cuenta que setStatusBarHidden: vino disponibles en withAnimation 3.2.

3

Use sólo

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

en lugar de

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

Funciona sin previo aviso

Cuestiones relacionadas