Search code examples
objective-cintrospection

How to get the value of a variable based on it's string name?


I want to get the value of all ivars in an Objective-C class and load them into an array.

I have the following code:

Class class = [self class];
NSString *myClassName = NSStringFromClass([self class]);
unsigned int count;
Ivar *ivars = class_copyIvarList(class, &count);
for (int i=0; i<count; i++) {
    Ivar ivar = ivars[i];
    const char* name = ivar_getName(ivar);
    const char* typeEncoding = ivar_getTypeEncoding(ivar);
    NSLog(@"Class Name: %@ ivar: %s  Type Encoding: %s",myClassName, name, typeEncoding);
}

So I have the name as a string (name) and now I need the value of that ivar.

Something like:

value = [self valueFromStringName(name)];

So that if I have a date called myDate I can pass the string myDate into a method and it would return the date value it holds.

I've see routines that run methods from the string name of the method, but haven't see where you can get the value from a string name.


Solution

  • Given you are already using runtime functions why not continue and use:

    id object_getIvar(id object, Ivar ivar)
    

    to obtain the value of ivar?

    If you really wish to use a string look up KVC, "Accessor Search Patterns for Simple Attributes", and valueForKey: on NSObject.

    HTH