2016-04-02 3 views
0

Я хочу получить значение всех ivars в классе Objective-C и загрузить их в массив.Как получить значение переменной на основе ее имени строки?

У меня есть следующий код:

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

Так у меня есть имя в виде строки (имя), и теперь мне нужно значение этого Ивар.

Что-то вроде:

value = [self valueFromStringName(name)]; 

Так что, если у меня есть дата под названием myDate я могу передать строку myDate в метод, и он будет возвращать значение даты его держит.

Я вижу процедуры, которые запускают методы из имени строки метода, но не видят, где вы можете получить значение из имени строки.

ответ

1

Учитывая вы уже используете функции времени выполнения, почему бы не продолжать и использование:

id object_getIvar(id object, Ivar ivar) 

, чтобы получить значение Ивар?

Если вы действительно хотите использовать строку, найдите KVC, «Шаблоны поиска для простых атрибутов» и valueForKey: на NSObject.

HTH