मैं मूल रूप से एक्सकोड 4.0 में निर्मित एक प्रोजेक्ट पर काम कर रहा हूं, और फिर XCode 4.2 का उपयोग करने के लिए माइग्रेट किया गया। अब मैं XCode 4.5 की ओर पलायन बाहर परीक्षण किया है, और मैं नीचे की तरह चेतावनियों की एक टन हो रही है ...एक्सकोड 4.5 माता-पिता/बाल कक्षाओं के लिए श्रेणियों के बीच विधि नाम विवादों के बारे में चेतावनी देता है
instance method 'values' in category from <pathToTheFile>/HistoryObject+extras.o conflicts with same method from another category
इन चेतावनियों XCode के पिछले संस्करणों में दिखाई दिया कभी नहीं, और कोड नहीं बदला है।
प्रोजेक्ट को तैनाती लक्ष्य के लिए आईओएस 4.3 पर सेट किया गया है।
तो, हमारे पास पिछले डेवलपर से डीएओ प्रकार के वर्गों का एक गुच्छा है जो मुझे विश्वास है कि कोरडाटा से स्वत: जेनरेट किया गया था, और फिर इनमें से प्रत्येक वर्ग में एक श्रेणी है जो इसे कुछ तरीकों को लागू करने के लिए विस्तारित करती है। मैं एक उदाहरण दूंगा ...
हमारे पास लिसा ऑब्जेक्ट नामक एक बेस क्लास है जो एनएसएमएनेज ऑब्जेक्ट से विरासत में है, और इसमें लिसा ऑब्जेक्ट + एक्स्ट्रा नामक एक श्रेणी है। लिसा ऑब्जेक्ट + एक्स्ट्रा में, "मान" नामक एक विधि है जो एक एनएसएमयूटेबल डिक्शनरी देता है।
हमारे पास इतिहासऑब्जेक्ट नामक एक कक्षा है जो लिसा ऑब्जेक्ट से प्राप्त होती है। HistoryObject के लिए एक श्रेणी भी है जिसे HistroyObject + Extras नाम दिया गया है। इस श्रेणी में "मान" नामक एक विधि भी है। HistoryObject + अतिरिक्त मूल्य विधि में, यह [सुपर मान] को कॉल करता है, और उसके बाद कुछ स्थितियों के लिए जांच करता है और बेस क्लास विधि में सेट नहीं होने वाले शब्दकोश में कुछ अतिरिक्त मान सेट करता है।
हमारे पास LessonStatusObject नामक एक वर्ग है जो हिस्ट्रीऑब्जेक्ट से विरासत में है, और इसमें भी LessonStatusObject + Extras नामक एक श्रेणी है, जिसमें मूल्यों का नाम है। यह मान विधि [सुपर वैल्यू] भी कॉल करती है और फिर लौटाई गई शब्दकोश पर कुछ अतिरिक्त काम करती है।
इनमें से प्रत्येक "मूल्य" विधियों के लिए, हमें ऊपर दिखाए गए जैसा संकलन समय पर एक चेतावनी मिलती है जहां यह कहता है कि श्रेणी में विरोधाभासी नाम के साथ एक विधि है।
मेरे पास इसके बारे में कुछ प्रश्न हैं।
पहला, क्या यह कार्यान्वयन किसी भी वैध समस्या का कारण बन सकता है, या ये चेतावनियां आमतौर पर सौम्य हैं? मैंने यह सोचने की कोशिश की है कि यह कार्यान्वयन रनटाइम पर अस्पष्टता का कारण बन सकता है, लेकिन मुझे नहीं लगता कि यह कैसे हो सकता है।
दूसरा, क्या ऐसा कुछ है जो मुझे इन चेतावनियों को ठीक करने के लिए करना चाहिए (और मेरा मतलब यह नहीं है कि उन्हें केवल दिखाना बंद कर दें; मेरा मतलब है कारण को ठीक करना)? क्या कोई और तरीका है जिसके बारे में हमें इस बारे में जाना चाहिए?
इसके अलावा, एक्सकोड 4.2 इस बारे में चेतावनी क्यों नहीं देगा, लेकिन एक्सकोड 4.5 चेतावनी देता है?
क्या मैं श्रेणियों के बारे में कुछ गलत समझ रहा हूं? मेरा मतलब है, अगर "मूल्य" विधि वास्तव में प्रत्येक वर्ग कार्यान्वयन का हिस्सा थी, तो हम उन्हें जिस तरीके से ओवरराइड करने में कोई समस्या नहीं होगी, लेकिन संकलक बस शिकायत कर रहा है क्योंकि ये श्रेणियां हैं। क्या इस बारे में कुछ भी असुरक्षित है?
किसी भी सलाह की बहुत सराहना की जाती है।
संपादित करें: बस अधिक जानकारी प्रदान करने के लिए ... जब हम एक्सकोड 4.2 का उपयोग कर रहे थे, तो परियोजना में एप्पल एलएलवीएम कंपाइलर 3.0 पर संकलक सेट किया गया था। अब जब मैं एक्सकोड 4.5 में प्रोजेक्ट खोलता हूं, तो इसमें ऐप्पल एलएलवीएम कंपाइलर 4.1 पर संकलक सेट है।
कृपया आईडीई (एक्सकोड) और कंपाइलर (क्लैंग, मैं मान रहा हूं) के बीच अंतर करना सीखें। संकलक वह आपको चेतावनी देता है, न कि एक्सकोड। एक्सकोड सिर्फ सामने वाला अंत है। –