25

我知道对象属性的字符串名称。我将如何使用字符串获取和设置该属性?

4

2 回答 2

50

虽然@weichsel 是正确的,但还有更好的方法。

采用:

[anObject valueForKey: @"propertyName"];

[anObject setValue:value forKey:@"propertyName"];

显然,@"propertyName"可以是NSString在运行时动态组合的。

这种技术称为键值编码,是 Cocoa 的基础。

为什么这更好是因为-valueForKey它将做必要的事情来“装箱”属性返回到对象的任何类型。因此,如果属性是 type int,它将返回一个NSNumber包含 int 的实例。

这更容易处理 -performSelector适用恰好适合指针内存价值的类型。

请注意,还有-setValue:forKey:.

于 2009-12-28T15:20:09.907 回答
2

@synthesize propertyName自动生成 getter 和 setter 方法。

编译器生成

  • - (id)propertyName;
  • - (void)setPropertyName;

如果你有一个选择器作为 NSString,你可以使用performSelector:NSSelectorFromString.
例如:
[object performSelector:NSSelectorFromString(@"propertyName") ...]

于 2009-12-28T15:13:28.220 回答