Eine geringfügige Änderung des Vorschlags von @Krizz, damit er ordnungsgemäß funktioniert, wenn die Konstanten-Header-Datei in den PCH aufgenommen werden soll, was eher normal ist. Da das Original in den PCH importiert wird, wird es nicht erneut in den PCH geladen.m
Datei sodass Sie keine Symbole erhalten und der Linker unglücklich ist.
Mit der folgenden Änderung kann es jedoch funktionieren. Es ist ein bisschen verworren, aber es funktioniert.
Sie benötigen drei Dateien, .h
Datei , die die Konstanten - Definitionen, die hat .h
Datei und die .m
Datei, werde ich verwenden ConstantList.h
, Constants.h
und Constants.m
, respectively. Der Inhalt von Constants.h
ist einfach:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
und die Constants.m
Datei sieht aus wie:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
Schließlich enthält die ConstantList.h
Datei die tatsächlichen Deklarationen und das ist alles:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Ein paar Dinge zu beachten:
Ich musste das Makro in der .m
Datei neu definieren, nachdem ich #undef
es für das zu verwendende Makro verwendet hatte.
Ich musste #include
stattdessen auch verwenden, #import
damit dies richtig funktioniert und der Compiler die zuvor vorkompilierten Werte nicht sieht.
Dies erfordert eine Neukompilierung Ihres PCH (und wahrscheinlich des gesamten Projekts), wenn Werte geändert werden. Dies ist nicht der Fall, wenn sie wie gewohnt getrennt (und dupliziert) werden.
Hoffe das ist hilfreich für jemanden.