无法识别选择错误与performSelector:方法

问题描述:

我打电话无法识别选择错误与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,我得到的错误。当我用(addElement :)替换selectorName时,它工作正常。

你只写这样的

[tempData performSelector:selectorName withObject:text]; 

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

+0

它的工作原理,谢谢 – Mahir 2012-07-22 11:24:54

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

+0

不幸的是无法正常工作。我尝试过addElement/selectorName,addElement:/ selectorName :, addElement:/ selectorName和addElement/selectorName: – Mahir 2012-07-22 11:23:03

+0

@divol,也许不是OP的问题,但它对我的情况有所帮助。 – terphi 2013-06-06 18:11:51

似乎有一点混乱围绕@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: