0

我打电话

[delegate addText:button.titleLabel.text withSelector:@selector(addElement:) fromKeyboard:self.name]

对应于

- (void)addText:(NSString *)text withSelector:(SEL)selectorName fromKeyboard:(NSString *)name {

   [tempData performSelector:@selector(selectorName) withObject:text];

}

但是,当我在 tempData 上调用执行选择器方法时,出现错误。当我用 (addElement:) 替换 selectorName 时,它​​工作正常。

4

3 回答 3

4

你只会这样写

[tempData performSelector:selectorName withObject:text];

它已经是一个选择器,所以你不需要写 @selectr(...)

于 2012-07-22T11:21:06.623 回答
3

@selector(selectorName) 你忘记了:@selector(selectorName:)

于 2012-07-22T11:20:36.107 回答
1

@selector()这里的构造似乎有点混乱:

在这种情况下(很像引号@selector(selectorName)内 的 C 字符串的文字。这意味着您正在尝试将命名选择器发送 给对象,但失败了。selectorName"selectorName"selectorNametempData

如果要传入选择器以按名称发送,请使用以下NSSelectorFromString()函数:

- (void)addText:(NSString *)text withSelector:(NSString *)selectorName fromKeyboard:(NSString *)name {
 [tempData performSelector:NSSelectorFromString(selectorName) withObject:text];
}

在这种情况下,通过使用确保接收器响应选择器可能是个好主意-respondsToSelector:

于 2012-07-22T11:26:21.627 回答