我打电话
[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上调用perform选择器方法时,我得到了错误。当我用(addElement :)替换selectorName时,它工作正常。
答案 0 :(得分:4)
你只能这样写
[tempData performSelector:selectorName withObject:text];
它已经是一个选择器所以你不需要写@selectr(...)
答案 1 :(得分:3)
@selector(selectorName) 你忘记 : @selector(selectorName:)
答案 2 :(得分:1)
这里的@selector()
构造似乎有些混乱:
@selector(selectorName)
是选择器的文字,名称在大括号内,
在这种情况下selectorName
(很像"selectorName"
是引号内C字符串的文字。这意味着您正在尝试将名为selectorName
的选择器发送到tempData
对象,失败了。
如果要传递选择器以按名称发送,请使用NSSelectorFromString()
功能:
- (void)addText:(NSString *)text withSelector:(NSString *)selectorName fromKeyboard:(NSString *)name {
[tempData performSelector:NSSelectorFromString(selectorName) withObject:text];
}
在这种情况下,使用-respondsToSelector: