我问过一个相关的问题,但我想我会把它分成自己的问题。请参阅以下代码以调用属性 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);
答案 0 :(得分:10)
使用键值编码。
即。 [someObject setValue: anObjectValue forKey: @"foo"];
答案 1 :(得分:0)
今天早些时候读完了你的另一个问题,这就是我能想到的:
无法直接将其用作制定者。 getter不接受任何参数,因此你的选择器永远不会有冒号,所以它永远不会起作用。
最简单的方法是将您的setter方法定义为foo:
而不是setFoo:
。这样你只需要附加冒号(这很便宜,只需要两个额外的字符串)