我希望使用反射从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
答案 0 :(得分:10)
使用Key-Value-Coding可以更轻松地完成此操作。
已经有办法通过传递字符串来获取属性的值:
-(id)valueForKey:(NSString *)keyName;
您无需为此编写自己的方法。
答案 1 :(得分:6)
那应该是valueForKey而不是objectForKey。 objectForKey是一个NSDictionary实例方法。 除此之外,您的代码中存在潜在的错误。上面方法中的返回类型是字符串,但是在返回之前不要将其强制转换为NSString。即使你确定它总是返回一个字符串,最好避免任何疑问。在声明NSString属性时,您应该复制它而不是保留它。并且,如果您可以轻松地说:
,则声明“我”变量的重点是什么[self valueForkey:paramName];