使用performSelector:方法无法识别选择器错误

时间:2012-07-22 11:15:41

标签: objective-c selector unrecognized-selector performselector

我打电话

[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时,它工作正常。

3 个答案:

答案 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:

确保接收器响应选择器可能是个好主意