Una ligera modificación de la sugerencia de @Krizz, para que funcione correctamente si el archivo de encabezado de constantes se va a incluir en la PCH, lo cual es bastante normal. Dado que el original se importa a la PCH, no lo volverá a cargar en el .m
archivo y, por lo tanto, no obtendrá símbolos y el enlazador no está satisfecho.
Sin embargo, la siguiente modificación le permite funcionar. Es un poco complicado, pero funciona.
Necesitará 3 archivos, .h
archivo que tiene las definiciones constantes, el .h
archivo y el .m
archivo, usaré ConstantList.h
, Constants.h
y Constants.m
, respectivamente. los contenidos de Constants.h
son simplemente:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
y el Constants.m
archivo se ve así:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
Finalmente, el ConstantList.h
archivo tiene las declaraciones reales y eso es todo:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Un par de cosas a anotar:
Tuve que redefinir la macro en el .m
archivo después de #undef
haberla usado para que se usara la macro.
También tuve que usar en #include
lugar de #import
esto para que funcione correctamente y evitar que el compilador vea los valores previamente compilados.
Esto requerirá una recompilación de su PCH (y probablemente de todo el proyecto) cada vez que se modifiquen los valores, lo que no es el caso si están separados (y duplicados) como es normal.
Espero que sea útil para alguien.