2010-07-23 24 views
30

Mi proyecto tiene múltiples objetivos. Cada objetivo tiene su propio archivo Class para configurar cosas. Quiero almacenar ese nombre Class en una configuración de destino (Info.plist o la configuración de Construcción de destino). Para que pueda definir qué clase necesito usar en cada objetivo en función de esta configuración.iphone: obtenga una variable definida por el usuario en la configuración de Target por código?

De acuerdo con this question, puse "una variable específica del objetivo User Defined" en la configuración de construcción de cada objetivo.

¿Pero no sé cómo recuperarlo en mi código?

+0

que se dirigen configuración qué se refiere? La configuración de compilación? El Info.plist? ¿Dónde estableciste la variable? – tonklon

+0

Lo puse en la configuración de compilación del objetivo. – KONG

Respuesta

65

Como el archivo Info.plist es preprocesada demasiado, puede utilizar este enfoque:

definir una configuración definida por el usuario en los valores de creación , por ejemplo CLASS_NAME. Y una clave para su archivo Info.plist. Nombre la clave CLASS_NAME y establezca el valor en ${CLASS_NAME}.

A continuación, puede acceder a esta configuración por:

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

No puede usar directamente una variable definida en la configuración de compilación. Estas variables están destinadas a ser utilizadas por las herramientas de compilación.

En su lugar, define una macro de preprocesador en la variable Macros de preprocesador como 'MYVAR = 5'. Se puede acceder a estas macros en su código como:

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

Tenga en cuenta, que la evaluación de estas expresiones sucede en la acumulación de tiempo no en tiempo de ejecución.

Es un uso muy típico definir una macro sin tener en cuenta el valor. Por ejemplo, defina 'DEBUG = 1' en la configuración de depuración de la compilación y 'RELEASE = 1' en la configuración de compilación de la versión.

Luego, puede probar usando #ifdef o #ifndef

#ifdef DEBUG 
    // Log 
#endif 
+0

Oh, ya veo. ¿Qué hay de Info.plist. ¿Puedo almacenar el nombre 'Class' allí y obtenerlo del código? – KONG

+0

He agregado otra respuesta sobre cómo usar el info.plist. – tonklon

+4

Si lo entiendo bien, ¿no hay forma de recuperar el valor de configuración de compilación directamente? Porque para los secretos y las claves (que cambian según la configuración), sería mejor no pasar por la lista. – Rivera

Cuestiones relacionadas