Как получить значение из свойства класса в Objective-C? - PullRequest
10 голосов
/ 12 июля 2011

Я хочу получить значение переменной из классаjective-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

Ответы [ 2 ]

10 голосов
/ 12 июля 2011

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

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

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

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

6 голосов
/ 12 июля 2011

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

[self valueForkey:paramName];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...