Comment #define basé sur la version iOS?
J'ai un Constants.h
fichier dans mon application, où je #define
application à l'échelle de choses pour un accès facile plus tard. Je vais avoir un moment difficile, cependant, #define
ing basé sur la version iOS. Voici ce que j'ai essayé:
#ifdef __IPHONE_7_0
#define kHamburgerImage [UIImage imageNamed:@"reveal_menu_icon_portrait_ios7.png"];
#else
#define kHamburgerImage [UIImage imageNamed:@"reveal_menu_icon_portrait.png"];
#endif
Juste parce qu'il dit iOS 7, il ne signifie pas que c'est en vertu de la LDN, O ferme!
Qui fonctionne très bien - pour iOS 7. Quand je lance mon appli sur iOS 6, en revanche, la #define
est encore l'iOS 7 - il semble que la #ifdef
est jamais pris en compte.
Que puis-je faire pour résoudre ce problème?
Vous ne pouvez pas faire cela. La version iOS doit être un moteur d'exécution de décision, pas un moment de la compilation de décision.
Désolé! Je suppose que ça ne fonctionne pas - il travaille pour le code, mais pas #définit...
Droit, sauf si vous faites cela pour être en mesure de générer le code à deux différentes versions de Xcode, vous devez utiliser l'exécution des contrôles, pas le temps de compilation des contrôles. Les deux
Désolé! Je suppose que ça ne fonctionne pas - il travaille pour le code, mais pas #définit...
Droit, sauf si vous faites cela pour être en mesure de générer le code à deux différentes versions de Xcode, vous devez utiliser l'exécution des contrôles, pas le temps de compilation des contrôles. Les deux
#if
et #define
sont la compilation des fonctionnalités.OriginalL'auteur Undo | 2013-07-24
Vous devez vous connecter pour publier un commentaire.
Au lieu d'utiliser des contrôles de compilation, vous devez d'exécution des contrôles. Cela signifie que vous ne pouvez pas utiliser
#define
. Je suggère d'utiliser une variable statique qui est initialisé lors de l'exécution en fonction de la version de l'iOS. Ci-dessous est un exemple, si vous avez seulement besoin de la valeur dans un seul fichier.Certains .m fichier:
Edit: étant donné que ces derniers doivent être globales, vous devez faire ceci:
Constantes.h:
Constantes.m:
Mais cela souffre d'un problème. Sauf si vous prenez des mesures spécifiques, l'accès à ces globals pourrait entraîner
nil
pointeurs. Ils ne initialisé si la classe est en fait référencés. Je pense que comme la première ligne de votreapplication:didFinishLaunchingWithOptions:
vous n':Cela garantit l'initialiseur, est appelée et les constantes sont le programme d'installation avant de les utiliser n'importe où ailleurs dans votre code.
Constants.h
fichier dans un.m
fichier?Si ces produits sont utilisés dans un fichier global alors vous avez besoin d'une des Constantes.h et une des Constantes.m. Dans l' .h, déclarer
extern UIImage *kHamburgerImage;
. Puis dans le .m, retirez lastatic
mot-clé.Et je pourrais encore il suffit d'importer le
Constants.h
fichier et de le référencer commekHamburgerImage
?Qui est correct.
Merveilleux! L'essayer...
OriginalL'auteur rmaddy
Vous pouvez au moins raccourcir votre code en définissant les iOS de départ d'une macro.
Et puis votre nouveau code est plus lisible,
OriginalL'auteur John Beck
Vous devez utiliser #ifndef au lieu de #ifdef. Voici le code . J'espère que ça va vous aider.
kHamburgerImage
seront définis. Donc, au moment de l'exécution, quelle que soit la version de l'iOS, il est, cette valeur sera utilisée par toutes les versions.Je suis d'accord, vous avez raison. Cela ne fonctionne que sur les différents SDK de simulateurs.
OriginalL'auteur Nanda