@Krizz के सुझाव का एक मामूली संशोधन, ताकि यह ठीक से काम करे अगर कॉन्स्टेंट हेडर फ़ाइल को PCH में शामिल किया जाए, जो सामान्य है। चूंकि मूल को PCH में आयात किया जाता है, इसलिए यह इसे पुनः लोड नहीं करेगा.m
फ़ाइल और इस प्रकार आपको कोई प्रतीक नहीं मिलते हैं और लिंकर दुखी होता है।
हालाँकि, निम्न संशोधन इसे काम करने की अनुमति देता है। यह थोड़ा जटिल है, लेकिन यह काम करता है।
आपको 3 की आवश्यकता होगी फ़ाइलों , .h
फ़ाइल जिसकी निरंतर परिभाषा है, .h
फ़ाइल और .m
फ़ाइल, मैं क्रमशः उपयोग करूँगा ConstantList.h
, Constants.h
और Constants.m
। की सामग्री Constants.h
बस हैं:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
और Constants.m
फ़ाइल इस तरह दिखती है:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
अंत में, ConstantList.h
फ़ाइल में वास्तविक घोषणाएँ हैं और यह सब है:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
ध्यान देने योग्य बातें:
में मैक्रो को फिर से परिभाषित करना था .m
मैक्रो का उपयोग करने के लिए आईएनजी के बाद फाइल#undef
।
मुझे #include
इसके बजाय #import
सही तरीके से काम करने के लिए उपयोग करना था और पहले से तैयार किए गए मूल्यों को देखकर कंपाइलर से बचना था।
इसके लिए आपके पीसीएच (और शायद पूरी परियोजना) की एक पुनर्संरचना की आवश्यकता होगी, जब भी किसी भी मान को बदल दिया जाए, जो कि सामान्य होने पर अलग (और डुप्लिकेट) होने पर ऐसा नहीं होता है।
आशा है कि किसी के लिए उपयोगी है।