अद्यतन करने के लिए अपने संपादित:
एक वर्ग ऑब्जेक्ट, जो respondsToSelector:
ठीक से प्रतिक्रिया करता है जैसा कि आप शायद के बारे में पता कर रहे हैं। एक परीक्षण आवेदन में, मैं किसी भी संकलक बिना चेतावनी के निम्न में से दोनों कर सकते हैं:
NSLog(@"Responds to selector? %i", [MyObject respondsToSelector:@selector(respondsToSelector:)]);
NSLog(@"Responds to selector? %i", [[MyObject class] respondsToSelector:@selector(respondsToSelector:)]);
लेकिन, आप अपने चर पर एक प्रोटोकॉल घोषित किया है, तो यह मान लिया गया है कि वर्ग वस्तु आप इशारा कर रहे हैं उन को लागू करता है करने के लिए तरीकों। respondsToSelector:
पर कॉल करने के उद्देश्य से id
के रूप में someClass
को सबसे आसान समाधान डालना होगा। एक कुछ हद तक सफाई घोल अपनी खुद की @protocol
जो +respondsToSelector:(SEL)selector
वाणी घोषित करने के लिए, और फिर someClass
घोषित इस प्रकार होगा:
Class<SomeProtocol, ClassRespondingToSelector> someClass = ...
अंत में, http://bugreporter.apple.com पर एप्पल पर बग के लिए सुनिश्चित हो। एक साधारण परीक्षण आवेदन शामिल करें ताकि यह स्पष्ट हो कि आप क्या कर रहे हैं। वे ऐसी बग रिपोर्ट का स्वागत करते हैं, भले ही उन्हें अतीत में सबमिट किया गया हो, क्योंकि इससे उन्हें फिक्स को प्राथमिकता देने में मदद मिलती है।
अंतिम नोट: यह शायद क्योंकि सिद्धांत में हो रहा है, तो आप एक जड़ वस्तु पूरी तरह NSObject से अलग लागू करने के लिए है कि मामले में, यह नहीं होगा-respondsToSelector:
पर प्रतिसाद देने की चुन सकते थे, और। -[NSObject respondsToSelector:]
वास्तव में NSObject
प्रोटोकॉल में घोषित किया गया है, क्लास परिभाषा नहीं। NSObject
प्रोटोकॉल वास्तव में है जहां आप NSObject
के रूप में जो कुछ जानते हैं वह वास्तव में रहता है। कोई तर्क दे सकता है कि +respondsToSelector:
भी वहां होना चाहिए, लेकिन अभी तक, यह नहीं है। और चूंकि आपने प्रोटोकॉल सूची प्रदान की है, और विधि वहां नहीं है, यह आपको यह सुनिश्चित करने के लिए चेतावनी देती है कि आप जानते हैं कि आप क्या कर रहे हैं।
स्रोत
2009-07-16 05:21:11
मुझे इस मामले में विश्वास है कि वह वास्तव में कक्षा में नहीं डालना चाहता, आईडी नहीं। –
यह या तो हटाया गया कार्यक्षमता है या उत्तर अस्पष्ट है। 'कक्षा 'प्रतिक्रियाओं का जवाब नहीं देती है चयनकर्ता:'। – RileyE
इसे आज़माएं। यह हेडर में नहीं है, लेकिन 'id classObject = [SomeClass क्लास] करें; [classObject प्रतिसाद देता है चयनकर्ता:] ' –