无法识别选择错误与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( ...)
答
似乎有一点混乱围绕@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:
它的工作原理,谢谢 – Mahir 2012-07-22 11:24:54