Ody*_*dys 10 iphone reflection cocoa-touch objective-c
我想使用反射从objective-c类中获取变量值.
company.h看起来像
@interface Company : NSObject {
}
@property (nonatomic, retain) NSString* phone;
- (NSString*) getPropertyValueByName: (NSString*) paramName;
Run Code Online (Sandbox Code Playgroud)
company.m看起来像
@implementation Company
@synthesize phone;
- (NSString*) getPropertyValueByName: (NSString*) paramName
{
id me = self;
value = [me objectForKey: paramName];
return value;
}
@end
Run Code Online (Sandbox Code Playgroud)
我这样使用:
Company* comp = [Company new];
comp.phone = @"+30123456";
NSString* phone = comp.getPropertyValueByName(@"phone");
Run Code Online (Sandbox Code Playgroud)
我得到的是一个例外:
-[Company objectForKey:]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)
Abi*_*ern 10
使用键值编码可以更轻松地完成此操作.
已经有一种方法可以通过传递字符串来获取属性的值:
-(id)valueForKey:(NSString *)keyName;
Run Code Online (Sandbox Code Playgroud)
您不需要为此编写自己的方法.
那应该是valueForKey而不是objectForKey.objectForKey是一个NSDictionary实例方法.除此之外,您的代码中存在潜在的错误.上面方法中的返回类型是字符串,但是在返回之前不要将它强制转换为NSString.即使你确定它总是返回一个字符串,最好避免任何疑问.在声明NSString属性时,您应该复制它而不是保留它.而且,如果您可以轻松地说出声明"我"变量的重点是什么:
[self valueForkey:paramName];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6294 次 |
| 最近记录: |