46 votes

Vérifier la version iOS au moment de l'exécution?

C'est une sorte de suite à ma dernière question. Je suis l'aide d' beginAnimations:context: pour l'installation d'un bloc d'animation pour animer certains UITextLabels. Cependant, j'ai remarqué dans les docs que l'on dit: "l'Utilisation de cette méthode est déconseillée en iOS 4.0 et versions ultérieures. Vous devez utiliser la fonction de bloc méthodes d'animation à la place."

Ma question est que j'aimerais utiliser animateWithDuration:animations: (disponible sous iOS 4.0 et versions ultérieures), mais ne veut pas exclure les gens à l'aide iOS 3.0. Est-il un moyen de vérifier pour la version iOS de l'appareil au moment de l'exécution, de sorte que je puisse prendre une décision quant à l'énoncé à utiliser?

58voto

ArtSabintsev Points 2473

Une solution plus simple pour ceux qui auront besoin d'aide à l'avenir:

 NSArray *versionCompatibility = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];

if ( 5 == [[versionCompatibility objectAtIndex:0] intValue] ) { /// iOS5 is installed

    // Put iOS-5 code here

} else { /// iOS4 is installed

    // Put iOS-4 code here         

}
 

51voto

Vladimir Points 110327

Dans de nombreux cas, vous n'avez pas besoin de vérifier directement la version d'iOS. Vous pouvez plutôt vérifier si une méthode particulière est présente ou non dans le moteur d'exécution.

Dans votre cas, vous pouvez faire ce qui suit:

 if ([[UIView class] respondsToSelector:@selector(animateWithDuration:animations:)]){
// animate using blocks
}
else {
// animate the "old way"
}
 

19voto

pour se conformer à la version spécifiée dans le système définit

//#define __IPHONE_2_0 20000
//#define __IPHONE_2_1 20100
//#define __IPHONE_2_2 20200
//#define __IPHONE_3_0 30000
//#define __IPHONE_3_1 30100
//#define __IPHONE_3_2 30200
//#define __IPHONE_4_0 40000
Vous pouvez écrire la fonction comme ceci ( vous devriez vous store cette version quelque part plutôt que de calculer à chaque fois ):

+ (NSInteger) getSystemVersionAsAnInteger{
    int index = 0;
    NSInteger version = 0;

    NSArray* digits = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    NSEnumerator* enumer = [digits objectEnumerator];
    NSString* number;
    while (number = [enumer nextObject]) {
        if (index>2) {
            break;
        }
        NSInteger multipler = powf(100, 2-index);
        version += [number intValue]*multipler;
        index++;
    }
return version;
}

Ensuite, vous pouvez l'utiliser comme suit:

if([Toolbox getSystemVersionAsAnInteger] >= __IPHONE_4_0)
{
  //blocks
} else 
{
  //oldstyle
}

6voto

JeremyP Points 46808

Déconseillé n'est pas identique à obsolète.

Si vous devez prendre en charge des versions antérieures d'iOS qui ne disposent pas des méthodes basées sur les blocs, l'utilisation des méthodes plus anciennes ne présente aucun inconvénient (tant qu'elles n'ont pas été supprimées, bien sûr).

6voto

SGRKDL Points 66

Vous pouvez utiliser la version de la structure Foundation pour déterminer la version actuelle du système.

 if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1){

//for earlier versions

} else {

//for iOS 7

}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X