我知道对象属性的字符串名称。我如何使用字符串获取和设置该属性?
答案 0 :(得分:51)
虽然@weichsel是正确的,但还有更好的方法。
使用:
[anObject valueForKey: @"propertyName"];
和
[anObject setValue:value forKey:@"propertyName"];
显然,@"propertyName"
可以是在运行时动态组合的NSString
。
这种技术称为Key Value Coding,是Cocoa的基础。
为什么这样做更好是因为-valueForKey
将执行必要的操作以“阻止”属性返回到对象的任何类型。因此,如果属性的类型为int
,则它将返回包含int的NSNumber
实例。
这更易于处理 - performSelector
仅 适用于发生的类型,以适应指针的内存价值。
请注意,还有-setValue:forKey:
。
答案 1 :(得分:2)
@synthesize propertyName
自动生成getter和setter方法。
编译器生成
- (id)propertyName;
- (void)setPropertyName;
如果你有一个选择器作为NSString,你可以使用performSelector:NSSelectorFromString
例如: -
[object performSelector:NSSelectorFromString(@"propertyName") ...]