Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get property name as a string

I need a way to pass a property and get the name assigned to it. Any suggestions?

@property (nonatomic, retain) MyObject *crazyObject;

NSString *str = SOME_WAY_TO_GET_PROPERTY_NAME(crazyObject);
// Above method should return @"crazyObject"
like image 476
aryaxt Avatar asked Sep 11 '25 07:09

aryaxt


2 Answers

You can try this:

unsigned int propertyCount = 0;
objc_property_t * properties = class_copyPropertyList([self class], &propertyCount);

NSMutableArray * propertyNames = [NSMutableArray array];
for (unsigned int i = 0; i < propertyCount; ++i) {
  objc_property_t property = properties[i];
  const char * name = property_getName(property);
  [propertyNames addObject:[NSString stringWithUTF8String:name]];
}
free(properties);
NSLog(@"Names: %@", propertyNames);
like image 198
Oscar Gomez Avatar answered Sep 12 '25 21:09

Oscar Gomez


It's as simple as this...expanding upon what Chuck already mentioned:

#ifndef STR_PROP
    #define STR_PROP( prop ) NSStringFromSelector(@selector(prop))
#endif

You then use it like so:

NSString *strProp = STR_PROP(myProperty);
like image 45
Arvin Avatar answered Sep 12 '25 21:09

Arvin