Как получить значение из свойства класса в Objective-C?

Я хочу получить значение переменной из класса objective-c, используя отражение.

company.h выглядит как

@interface Company : NSObject {
}
@property (nonatomic, retain) NSString* phone;
- (NSString*) getPropertyValueByName: (NSString*) paramName;

company.m выглядит как

@implementation Company
@synthesize phone;
- (NSString*) getPropertyValueByName: (NSString*) paramName
{    
    id me = self;
    value = [me objectForKey: paramName];
    return value;
}
@end

Я использую это как:

Company* comp = [Company new];
comp.phone = @"+30123456";

NSString* phone = comp.getPropertyValueByName(@"phone");

То, что я получаю, является исключением:

-[Company objectForKey:]: unrecognized selector sent to instance

Ответ 1

Это должно быть valueForKey вместо objectForKey. objectForKey - метод экземпляра NSDictionary.  Кроме того, в вашем коде есть потенциальная ошибка. Тип возврата в указанном выше методе является строкой, но вы не отправляете его в NSString перед возвратом. Даже если вы уверены, что он всегда вернет строку, это хорошая практика, чтобы избежать каких-либо сомнений. И, объявив свойство NSString, вы должны скопировать его, а не сохранить его. И какой смысл в объявлении переменной "я", если вы легко можете сказать:

[self valueForkey:paramName];

Ответ 2

Существует гораздо более простой способ сделать это, используя Key-Value-Coding.

Уже есть способ получить значение свойства, передав строку:

-(id)valueForKey:(NSString *)keyName;

Вам не нужно писать свои собственные методы для этого.

Фактически Key-Value-Coding является частью iOS Core Compptencies.