2009-09-02 15 views
61

मैं किसी ऑब्जेक्ट के प्रकार को देखना चाहता हूं। मैं उसे कैसे कर सकता हूँ?आईफोन कैसे ऑब्जेक्ट के प्रकार की जांच करें?

परिदृश्य मुझे एक वस्तु मिल रही है। यदि वह ऑब्जेक्ट टाइप ए का है तो कुछ ऑपरेशन करें। यदि यह बी प्रकार का है तो कुछ ऑपरेशन करें। वर्तमान में ऑब्जेक्ट का प्रकार सी है जो ए और बी

में मेरे दो वर्ग AViewController और BViewController हैं। ऑब्जेक्ट जो मुझे UIViewController में मिल रहा है। अब यह जांचने के लिए कि ऑब्जेक्ट AViewController या BViewController है या नहीं?

+0

का शिकार http://stackoverflow.com/questions/1144629/in -objective-c-how-do-i-test-the-object-type – ennuikiller

उत्तर

152
if([some_object isKindOfClass:[A_Class_Name class]]) 
{ 
    // do somthing 
} 
+6

@ जसारीन की पोस्ट अधिक विशिष्ट है। उदाहरण के लिए तुलना करें कि कोई ऑब्जेक्ट है KindOfClass [UIView क्लास] आपको सभी UIImageViews, UIImages, UIRoundRectButtons भी लौटाएगा ..... इसलिए इस मामले में "isMemberOfClass बेहतर समाधान हो सकता है। –

44

NSObject पर कुछ विधियां हैं जो आपको कक्षाओं की जांच करने की अनुमति देती हैं।

पहले -class है जो आपके ऑब्जेक्ट की कक्षा को वापस कर देगा। यह या तो AViewController या BViewController वापस आ जाएगा।

फिर दो विधियां हैं, -isKindofClass: और isMemberOfClass:

-isKindOfClass: रिसीवर की तुलना तर्क के रूप में पारित कक्षा के साथ करेगा और कक्षा के समान प्रकार या वर्ग के उप-वर्ग के आधार पर सही या गलत वापस आ जाएगा।

-isMemberOfClass: रिसीवर की तुलना तर्क के रूप में पारित कक्षा के साथ करेगा और कक्षा के अनुसार सख्ती से एक ही कक्षा के आधार पर सही या गलत वापस आ जाएगी। ऑब्जेक्टिव-सी में

3

एक और अधिक आम पैटर्न की जांच करने के लिए यदि वस्तु तरीकों आप में रुचि रखते हैं के लिए और जवाब उदाहरण:।

if ([object respondsToSelector:@selector(length)]) { 
    // Do something 
} 

if ([object conformsToProtocol:@protocol(NSObject)]) { 
    // Do something 
} 
+0

यह सच है, लेकिन इस मामले में बहुत उपयोगी नहीं है प्रश्नकर्ता में रुचि रखने वाली दो वस्तुएं एक विशेष दृश्य नियंत्रक के उप-वर्ग हैं। प्रत्येक व्यक्ति एक ही विधि को लागू कर सकता है, लेकिन अलग-अलग व्यवहार कर सकता है। इसलिए उसे पता होना चाहिए कि वे किस सबक्लास से निपट रहे हैं। – Jasarien

+0

यदि ऐसा है , आपको शायद अपने डिजाइन को दोबारा बनाना चाहिए। isKindOfClass: निश्चित रूप से काम करेगा, लेकिन आमतौर पर लंबे समय तक बहुत ही बनाए रखने योग्य नहीं है। – rpetrich

संबंधित मुद्दे