Niewielka modyfikacja sugestii @Krizz, aby działała poprawnie, jeśli plik nagłówka stałych ma być zawarty w PCH, co jest raczej normalne. Ponieważ oryginał jest importowany do PCH, nie załaduje go ponownie do .m
pliku, a zatem nie otrzymasz żadnych symboli, a linker jest niezadowolony.
Jednak następująca modyfikacja pozwala mu działać. To trochę skomplikowane, ale działa.
Potrzebne będą 3 pliki, .h
plik ze stałymi definicjami, .h
plik i .m
plik, którego użyję ConstantList.h
, Constants.h
i Constants.m
odpowiednio. zawartość Constants.h
jest po prostu:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
i Constants.m
plik wygląda następująco:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
Wreszcie ConstantList.h
plik zawiera rzeczywiste deklaracje i to wszystko:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Kilka rzeczy do zapamiętania:
Musiałem ponownie zdefiniować makro w .m
pliku po #undef
ing go do makro ma być używany.
Musiałem także użyć #include
zamiast #import
tego, aby działało to poprawnie i unikałem zauważenia przez kompilator wcześniej wstępnie skompilowanych wartości.
Będzie to wymagało ponownej kompilacji twojego PCH (i prawdopodobnie całego projektu) za każdym razem, gdy jakiekolwiek wartości zostaną zmienione, co nie ma miejsca, jeśli zostaną one rozdzielone (i powielone) jak zwykle.
Mam nadzieję, że jest to pomocne dla kogoś.