你如何通过名字给财产安装者打电话?

时间:2010-12-29 00:42:17

标签: objective-c

我问过一个相关的问题,但我想我会把它分成自己的问题。请参阅以下代码以调用属性 getter

SEL propSelector = NSSelectorFromString(propertyName);
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[target class]instanceMethodSignatureForSelector:propSelector]];
[inv setSelector:propSelector];
[inv setTarget:target];
[inv invoke];
float value;
[inv getReturnValue:&value];

我想做同样的事情,但要打电话给 SETTER 。我还想避免通过构建@"setPropertyName:"字符串来手动设置setter名称。底线 - 是否可以使用此行创建的选择器来调用 setter

SEL propSelector = NSSelectorFromString(propertyName);

2 个答案:

答案 0 :(得分:10)

使用键值编码。

即。 [someObject setValue: anObjectValue forKey: @"foo"];

答案 1 :(得分:0)

今天早些时候读完了你的另一个问题,这就是我能想到的:

无法直接将其用作制定者。 getter不接受任何参数,因此你的选择器永远不会有冒号,所以它永远不会起作用。

最简单的方法是将您的setter方法定义为foo:而不是setFoo:。这样你只需要附加冒号(这很便宜,只需要两个额外的字符串)