Как получить значение из свойства класса в 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.