2010-06-12 3 views
10

Heute meine App genehmigt, aber ich habe E-Mails von Benutzern sagt, es stürzt ab. Ich fand heraus, dassAufruf der entsprechenden setStatusBarHidden pro iOS-Version

ist das Problem, weil Benutzer Firmware 3.1.x diese API nicht funktioniert und App-Absturz.

So habe ich es ersetzen mit

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

Meine Fragen ...

Ist das, was ich die beste Lösung tat?

Warum warnt XCODE mich nicht, dass SetStatusBarHidden mitAnimation nicht in 3.0 ist, während ich meine Traget OS Firmware 3.0 einstelle?

Muss ich bei jeder API nachsehen, ob sie mit meinem Zielbetriebssystem funktioniert?

Danke

Antwort

23

Ich würde Ihnen empfehlen, das folgende Code-Snippet zu verwenden, anstatt die Version des Betriebssystems zu überprüfen, sondern prüfen, ob ein Selektor verfügbar ist.

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

, die wahrscheinlich das Beste, was ist, anders als Begrenzung der Anwendung auf> = 3,2 zu tun. Wie auch immer, Sie sollten von xcode gewarnt werden, dass die SetStatusBarHidden withAnimation Nachricht nicht unterstützt wird ("kann nicht antworten").

+0

ich nicht die Warnung erhalten habe, weil ich die IPHONEOS_DEPLOYMENT_TARGET bis 3,0 nicht die BASE SDK gesetzt. Auf der letzten xcode Version 3.2.3 sehe ich nur Firmware 4.0 und 3.2 als Basis-SDK, alle anderen fehlen. – iTarek

1

Leider, wenn Sie mit dem 4.0 SDK mit dem Simulator kompilieren, werden die oben genannten Lösungen geben Sie eine Warnung, die standardmäßig als Fehler behandelt wird:

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 können Sie entweder Legen Sie in den Erstellungseinstellungen "Warnungen als Fehler behandeln" auf "Falsch" fest, oder verwenden Sie Makros, um den richtigen Code bedingt einzuschließen. Ich habe meine Basis SDK auf Geräte 4.0, ist mein Ziel o 3.1 und ist mit diesem Makro:

#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 

Beachten Sie, dass setStatusBarHidden: withAnimation in 3.2 verfügbar kam.

3

Nur

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

statt

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

Es funktioniert ohne Vorwarnung

Verwandte Themen