2013-03-05 3 views
5

उद्देश्य-सी में, यदि गुण गुण nil[obj.property class]nil का उपयोग कर देता है तो मैं गुण-सी कक्षा की शून्य संपत्ति का वर्ग नाम कैसे प्राप्त करूं। क्या उद्देश्य-सी वर्ग की शून्य संपत्ति का वर्ग नाम प्राप्त करने का कोई तरीका है?ऑब्जेक्टिव-सी क्लास

यहाँ एक बहुत ही सरल उदाहरण है:

#import <Foundation/Foundation.h> 

@interface MyClass : NSObject 

@property (nonatomic, assign) NSDictionary *dict; 

@end 

@implementation MyClass 

@end 

int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     MyClass *c = [[MyClass alloc] init]; 
     NSLog(@"class %@, %@", [c.dict class], [c.dict isKindOfClass:[NSDictionary class]] ? @"YES" : @"NO"); 
    } 
} 

आउटपुट class (null), NO

+0

आप शर्त लगा सकता है: [मैं एक की ObjC वर्ग कैसे मिलता है ivar?] (http://stackoverflow.com/q/11265503) –

+0

@ जोश कैसवेल भले ही इवार का मूल्य 'शून्य 'है? –

+1

@ माइकडी के पास संपत्ति के * मूल्य * से कोई लेना देना नहीं है। एक पल के लिए इसके बारे में सोचो। –

उत्तर

7

है कैसे गेटर की वापसी प्रकार की जाँच के बारे में क्या?

Method m = class_getInstanceMethod([MyClass class], @selector(somePropertyGetter)); 
char type[32]; 
method_getReturnType(m, type, sizeof(type)); 
printf("Property type: %s\n", type); 

संपादित करें: वास्तविक वर्ग के नाम प्राप्त करने के लिए, संपत्ति ही (कोड this category से लिया गया) आत्मनिरीक्षण:

objc_property_t p = class_getProperty([MyClass class], "property"); 
// If you have a selector: 
objc_property_t p = class_getProperty([MyClass class], sel_getName(someSelector)); 
const char *typeStr = property_getTypeString(p); 
+0

ऊपर उठाया गया। प्रतिभाशाली!!! –

+0

यह विधि के प्रकार एन्कोडिंग स्ट्रिंग का उपयोग करता है और केवल आपको ऑब्जेक्ट प्रकारों के लिए '@' देता है, क्लास नाम नहीं। –

+0

@ जोश कैसवेल हाँ, ठीक है। –

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