如何根据变量的字符串名称获取变量的值?

时间:2016-04-02 02:41:43

标签: objective-c introspection

我想获取Objective-C类中所有ivars的值并将它们加载到数组中。

我有以下代码:

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);
}

所以我将名称作为字符串(名称),现在我需要该ivar的值。

类似的东西:

value = [self valueFromStringName(name)];

因此,如果我有一个名为myDate的日期,我可以将字符串myDate传递给方法,它将返回它保存的日期值。

我已经看到了从方法的字符串名称运行方法的例程,但是没有看到从字符串名称中获取值的位置。

1 个答案:

答案 0 :(得分:1)

鉴于您已经在使用运行时函数,为什么不继续使用:

id object_getIvar(id object, Ivar ivar)

获取ivar的值?

如果您真的希望使用字符串查找KVC,“简单属性的访问者搜索模式”和valueForKey:上的NSObject

HTH