2010-07-23 3 views
30

Mon projet a plusieurs cibles. Chaque cible possède son propre fichier Class pour paramétrer des éléments. Je souhaite stocker ce nom Class dans un paramètre cible (Info.plist ou le paramètre de construction de Target). Alors que je peux définir quelle classe je dois utiliser dans chaque cible en fonction de ce paramètre.iphone: obtention de la variable User Defined dans le paramétrage de Target par code?

Selon this question, j'ai mis "une variable User Defined spécifique à la cible" dans le paramètre de construction de chaque cible.

Mais je ne sais pas comment le récupérer dans mon code?

+0

Quel réglage ciblez voulez-vous dire? Les paramètres de construction? L'Info.plist? Où avez-vous défini la variable? – tonklon

+0

Je l'ai mis dans le paramètre de construction de la cible. – KONG

Répondre

65

Comme le fichier Info.plist est prétraité aussi, vous pouvez utiliser cette approche:

Définir un paramètre défini par l'utilisateur dans les paramètres de construction , par exemple CLASS_NAME. Et une clé pour votre fichier Info.plist. Nommez la clé CLASS_NAME et définissez la valeur sur ${CLASS_NAME}.

Vous pouvez accéder à ce paramètre par:

NSString* className = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CLASS_NAME"]; 
9

Vous ne pouvez pas utiliser directement une variable définie dans les paramètres de construction. Ces variables sont destinées à être utilisées par des outils de construction. Au lieu de cela, définissez une macro de préprocesseur dans la variable de macros du préprocesseur, par exemple 'MYVAR = 5'. Vous pouvez accéder à ces macros dans votre code comme:

#if MYVAR==5 
    //Do something 
#endif 

S'il vous plaît noter que l'évaluation de ces expressions se produit à l'accumulation du temps pas lors de l'exécution.

Il est très courant de définir une macro sans tenir compte de la valeur. Par exemple, définissez 'DEBUG = 1' dans les paramètres de construction de débogage et 'RELEASE = 1' dans les paramètres de construction de la version.

Vous pouvez ensuite tester en utilisant #ifdef ou #ifndef

#ifdef DEBUG 
    // Log 
#endif 
+0

Oh, je vois. Que diriez-vous de l'Info.plist. Puis-je stocker le nom 'Class' ici, et l'obtenir du code? – KONG

+0

J'ai ajouté une autre réponse, pour savoir comment utiliser info.plist. – tonklon

+4

Si je comprends bien, il n'y a aucun moyen de récupérer la valeur des paramètres de construction directement? Parce que pour les secrets et les clés (qui changent selon la configuration), il serait préférable de ne pas passer par le Plist. – Rivera

Questions connexes