2009-05-10 8 views
3

HI alliPhone vérifier la version du firmware

Je souhaite créer une application pour l'iPhone 2.2. * Et la version 3.0. Une méthode dans 2.2 * est déconseillée dans 3.0. (Comme UITableViewCell setText et setLabel)

Est-il possible de vérifier la version du micrologiciel est utilisé sur l'iPhone et de définir différents méthode à utiliser

+2

http://stackoverflow.com/questions/820142/how-to-target-a-specific-iphone-version – Kriem

Répondre

13

Vous aurez besoin d'utiliser les directives pré-processeur pour la compilation conditionnelle tels que __IPHONE_3_0 et construisez deux exécutables séparés.

Par exemple:

 
#ifdef __IPHONE_3_0 
// code specific to version 3 
#else 
// code specific to version 2 
#end 

Si vous devez détecter la version lors de l'exécution, vous pouvez utiliser [[UIDevice currentDevice] VersionSystème]. Il renvoie la chaîne avec la version actuelle de l'iPhone OS.

+1

En pratique, la construction de deux exécutables séparés pour les différentes versions de l'iPhone OS n'est pas une bonne expérience utilisateur. Cela contribue à la confusion et aux problèmes de compatibilité. Au lieu de cela, si votre application est compatible avec les versions antérieures d'iPhone OS, vérifiez la disponibilité des nouvelles API au moment de l'exécution. – Elliot

0

Comme mentionné dans l'autre thread référencé, alors que vous pouvez utiliser les directives pré-processeur pour générer deux applications à partir d'une base de code, vous aurez toujours besoin de deux applications (une pour 2.x et une pour 3.x)

Une directive de compilation ne peut pas être utilisée pour prendre une décision d'exécution.

Il y a plus de détails dans l'autre thread.

0

Autre solution, vérifiez simplement à l'aide de respondsToSelector. Pour exemple-

CGSize expectedLabelSize; 
    if ([subTitle respondsToSelector:@selector(sizeWithAttributes:)]) 
    { 
     expectedLabelSize = [subTitle sizeWithAttributes:@{NSFontAttributeName:subTitleLabel.font}]; 
    }else{ 
     expectedLabelSize = [subTitle sizeWithFont:subTitleLabel.font constrainedToSize:subTitleLabel.frame.size lineBreakMode:NSLineBreakByWordWrapping]; 
    } 
Questions connexes