Una leggera modifica del suggerimento di @Krizz, in modo che funzioni correttamente se il file di intestazione delle costanti deve essere incluso nel PCH, il che è piuttosto normale. Poiché l'originale viene importato nel PCH, non lo ricaricherà nel.m
file e quindi non si ottengono simboli e il linker è infelice.
Tuttavia, la seguente modifica consente di funzionare. È un po 'contorto, ma funziona.
Avrete bisogno di 3 file, .h
il file che ha le definizioni costanti, il .h
file di e la .m
lima, userò ConstantList.h
, Constants.h
e Constants.m
, rispettivamente. i contenuti di Constants.h
sono semplicemente:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
e il Constants.m
file appare come:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
Infine, il ConstantList.h
file contiene le dichiarazioni effettive e questo è tutto:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Un paio di cose da notare:
Ho dovuto ridefinire la macro nel .m
file dopo #undef
averla ing per la macro da utilizzare.
Ho dovuto anche usare #include
invece che #import
per farlo funzionare correttamente ed evitare che il compilatore vedesse i valori precedentemente precompilati.
Ciò richiederà una ricompilazione del tuo PCH (e probabilmente dell'intero progetto) ogni volta che i valori vengono modificati, il che non accade se vengono separati (e duplicati) normalmente.
Spero che sia utile per qualcuno.