मैं आईओएस प्रोजेक्ट पर ऐपडिलेगेट में कई अलग-अलग वर्गों के लिए सामान्य तरीकों और परिभाषाओं के साथ मदद कर रहा हूं। तो, उन वर्गों में से प्रत्येक में, .h फ़ाइल में, मैं #import "AppDelegate.h" का उपयोग करता हूं। यह तब तक ठीक काम करता है जब तक मुझे उन वर्गों में से किसी एक तक पहुंच की आवश्यकता न हो जो ऐपडिलेगेट को पहले से ही आयात करता है जो ऐपडिलेगेट आयात करता है। इस बिंदु पर, मुझे AppDelegate के लिए एक डुप्लिकेट इंटरफ़ेस परिभाषा त्रुटि मिलती है।"डुप्लिकेट इंटरफेस परिभाषा" त्रुटि प्राप्त करना, निश्चित रूप से # हेडर फाइलों को आयात करना है
ठीक है, तो यह उचित लगता है। मैं पहले से ही एक फाइल में ऐपडिलेगेट आयात कर रहा हूं जिसे मैं आयात कर रहा हूं, इसलिए ऐपडिलेगेट दो अलग-अलग स्थानों से आयात किया जा रहा है। तो मैं ऐपडिलेगेट लाइन को हटा देता हूं, और सबकुछ ठीक है।
लेकिन क्या होता है जब मुझे दो कक्षाओं को आयात करने की आवश्यकता होती है जिन्हें दोनों को AppDelegate आयात करने की आवश्यकता होती है?
मुझे एक बहुत ही विशिष्ट समस्या है कि मैं अपने सिर को चारों ओर लपेटने की कोशिश कर रहा हूं, और मुझे पता है कि यह ऐसा कुछ है जिसके कारण इसे करना है, लेकिन मुझे यकीन नहीं है कि क्या। तो मैं उम्मीद कर रहा हूं कि अगर मुझे पता चलता है कि मुझे इस प्रकार के आयात को कैसे संभालना है, और बाकी सब कुछ हल करें, और उम्मीद है कि यह मेरी समस्या हल करेगी। तो इसे अधिक ठोस शब्दों में डालने के लिए:
मेरे पास ClassA.h, ClassB.h, और ClassC.h है। सभी #import "AppDelegate.h" है। जब मुझे कक्षा में #import "ClassB.h" का उपयोग करने की आवश्यकता है, तो मैं कक्षा से #import "AppDelegate.h" पंक्ति को हटा देता हूं। सब कुछ सुचारू रूप से काम करता है। लेकिन क्या होगा यदि मुझे क्लास में "क्लाससीएच" को # आयात करने की भी आवश्यकता है, और क्लासबी और क्लाससी को #import "AppDelegate.h" की आवश्यकता है?
संपादित करें:
मैं सटीक परिदृश्य मैं एक साफ परियोजना में ऊपर वर्णित की कोशिश की, और यह ठीक बनाया, इसलिए वहाँ खेल में कुछ और ही है। लेकिन मैं निश्चित रूप से क्या कह सकता हूं कि जब यह समस्या पहले इस परियोजना के साथ आई थी, तो यह ऐपडिलेगेट की एक डुप्लिकेट इंटरफ़ेस परिभाषा थी, और जब मैंने #import "AppDelegate.h" पंक्ति को हटा दिया, तो त्रुटि दूर हो गई, और मैं अभी भी अन्य आयातित फ़ाइलों के माध्यम से AppDelegate.h विधियों और enums तक पहुंच थी।
क्या आप वाकई '# import' का उपयोग करते हैं और '# शामिल नहीं' करते हैं? '# import' को एक ही हेडर फ़ाइल को दो बार आयात करने के लिए डिज़ाइन नहीं किया गया है, इसलिए यह तार्किक प्रतीत नहीं होता है कि कंपाइलर #import" AppDelegate.h "दो बार – AliSoftware
100% सुनिश्चित है। मेरे Google शोध ने वही बात कहा है। मेरे पास अतीत में एक समान समस्या है, जिसे मैं .h के बजाय .m में फ़ाइल समेत ठीक करने में सक्षम था, लेकिन दुर्भाग्यवश, मुझे आयात करने में आयातित फ़ाइल में एक enum तक पहुंच की आवश्यकता है। एच, तो यह एक विकल्प नहीं है। – CowGoes
लेकिन मैंने अभी नीचे वर्णित परिदृश्य के साथ नमूना ऐप बनाया है, और यह काम करता है। तो मुझे लगता है कि यहाँ खेलने पर कुछ और है। लेकिन मैं निश्चित रूप से क्या कह सकता हूं कि जब यह मुद्दा अतीत में आया था, तो यह ऐपडिलेगेट की एक डुप्लिकेट इंटरफ़ेस परिभाषा थी, और जब मैंने #import "AppDelegate.h" पंक्ति को हटा दिया, तो त्रुटि दूर हो गई, और मेरे पास अभी भी था अन्य आयातित फ़ाइलों के माध्यम से AppDelegate.h विधियों और enums तक पहुंच। – CowGoes