如何从Objective-C中的类属性中获取值?

时间:2011-07-12 10:27:05

标签: iphone objective-c cocoa-touch reflection

我希望使用反射从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

2 个答案:

答案 0 :(得分:10)

使用Key-Value-Coding可以更轻松地完成此操作。

已经有办法通过传递字符串来获取属性的值:

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

您无需为此编写自己的方法。

答案 1 :(得分:6)

那应该是valueForKey而不是objectForKey。 objectForKey是一个NSDictionary实例方法。  除此之外,您的代码中存在潜在的错误。上面方法中的返回类型是字符串,但是在返回之前不要将其强制转换为NSString。即使你确定它总是返回一个字符串,最好避免任何疑问。在声明NSString属性时,您应该复制它而不是保留它。并且,如果您可以轻松地说:

,则声明“我”变量的重点是什么
[self valueForkey:paramName];