@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सही तरीके से काम करने के लिए उपयोग करना था और पहले से तैयार किए गए मूल्यों को देखकर कंपाइलर से बचना था।
इसके लिए आपके पीसीएच (और शायद पूरी परियोजना) की एक पुनर्संरचना की आवश्यकता होगी, जब भी किसी भी मान को बदल दिया जाए, जो कि सामान्य होने पर अलग (और डुप्लिकेट) होने पर ऐसा नहीं होता है।
आशा है कि किसी के लिए उपयोगी है।