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 .mpliku, 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, .hplik ze stałymi definicjami, .hplik i .mplik, którego użyję ConstantList.h, Constants.hi Constants.modpowiednio. zawartość Constants.hjest po prostu:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
i Constants.mplik 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.hplik zawiera rzeczywiste deklaracje i to wszystko:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Kilka rzeczy do zapamiętania:
Musiałem ponownie zdefiniować makro w .mpliku po #undef ing go do makro ma być używany.
Musiałem także użyć #includezamiast #importtego, 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ś.