6
votes

Définir la constante basée sur le type de périphérique

J'ai une constance.h fichier qui contient des constantes mondiales en fait. Étant donné que ma candidature est construite à la fois pour iPhone et iPad, je voudrais définir les mêmes constantes (c'est-à-dire avec le même nom) différemment pour les deux types de périphériques.

Pour une explication complète: P>

/******** pseudo code *********/

if (deviceIsIPad){
    #define kPageMargin 20
}
else {
    #define kPageMargin 10
}


0 commentaires

5 Réponses :


0
votes

hi écrivez ce code dans Appdelegate code> Classe

SecondVC *obj_secondvc = [[SecondVC alloc] initWithNibName:[AppDelegate isAppRunningOnIpad:@"SecondVC"] bundle:nil]; 


1 commentaires

Ce n'est pas une classe, c'est un fichier d'en-tête, il n'est donc jamais initialisé de ne pas appeler des méthodes de là ..



2
votes

#define est résolu au moment de la compilation, c'est-à-dire sur votre ordinateur

évidemment, vous ne pouvez pas les faire conditionnellement de votre choix. Je recommande de créer une variable statique et de les paramétrer sur le + (void) initialiser méthode de votre classe.

et pour la condition, utilisez quelque chose comme < / p> xxx

de sorte que cela irait xxx


1 commentaires

Utilisez-le sur votre classe d'applDelegate, de cette façon, il sera accessible dans l'application.



18
votes

Il est impossible d'obtenir le type de périphérique pendant l'étape de prétraitement. Il est déterminé de manière dynamique pendant l'exécution. Vous avez deux options:

  1. Créez deux cibles différentes (pour iPhone et iPad, respectivement) et définissez macro là-bas. P> li>

  2. Créer une macro qui insère une expression comme celle-ci: p> li> ol>

     #define IS_IPAD    (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
    
     #define kMyConstant1 (IS_IPAD ? 100 : 200)
     #define kMyConstant2 (IS_IPAD ? 210 : 230)
     #define kMyConstant3 (IS_IPAD ? @"ADASD" : @"XCBX")
    


2 commentaires

Je pense que je vais essayer la deuxième option et si cela fonctionne correctement, je vais marquer votre réponse comme correct :)


Génial, tu m'as sauvé tellement de temps!



0
votes

Utilisez Uidevice Macros - http://d3signerd.com/tag/uidevice/

Ensuite, vous pouvez écrire du code comme; xxx

ou xxx


0 commentaires

0
votes

Vous ne pouvez pas faire cela avec définir, car ils sont étendus au moment de la compilation. Cependant, vous pouvez définir des variables et définir leur valeur initiale en fonction de l'interface utilisateur idiom: xxx


0 commentaires