1

J'utilise des macros pour différer les versions mais je ne peux pas forcer le bon fonctionnement. Je:Macros #ifdef pour les versions de contrôle

#ifdef _IPHONE_4_0 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
#else 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#endif 

et

#if __IPHONE_OS_VERSION_MAX_ALLOWED < _IPHONE_4_0 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#else 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
#endif 

et

#if defined(__IPHONE_4_0) 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
#else 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#endif 

Peu importe quelle version j'utilise - toujours appelé seulement l'une des lignes. Et le __IPHONE_4_0 est toujours défini. Des idées?

Cordialement, Dmitry M.

Répondre

2

Les directives de traitement #if… sont résolus au moment de la compilation. Tant que vous compilez pour le SDK 4.0, la variante 4.0 sera toujours choisie.

Si vous avez l'intention de faire les travaux d'application pour < 4.0, vous devez utiliser un contrôle d'exécution:

UIApplication* app = [UIApplication sharedApplication]; 
if ([app respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) 
    [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
else 
    [app setStatusBarHidden:YES animated:YES]; 
+0

merci pour la réponse. mais dans ce cas, quoi pour ces macros peuvent être utilisés du tout? Je pensais que le __IPHONE_OS_VERSION_MAX_ALLOWED sera différent pour la même application ruinant sur OS différent. non? – Dmitry

+2

Dieu no. Les macros n'affectent que l'état du * compilateur * - une fois l'application compilée, elles ont disparu dans les brouillards de RAM et n'ont plus aucun effet sur l'application. Dans ce cas, Apple les utilise pour faire la distinction entre les cibles de compilation afin qu'un fichier d'en-tête puisse être utilisé pour plusieurs cibles et émettre des erreurs et des avertissements utiles, entre autres choses. –

-1

Un petit changement -

Le code suivant devrait fonctionner:

#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_4_0 
     [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; 
#else 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
#endif 

Plz note c'est __IPHONE_4_0 pas _IPHONE_4_0

+1

Non, cela ne fonctionnera pas. Voir l'autre réponse. –