我有点困惑,我一直在努力工作几个小时,谷歌搜索没有任何真正的线索。我想使用@selector为我的iPhone应用程序在objective-c中创建一个回调。
第1课:
- (void) someMethod {
// create selector
SEL successCallback = @selector(successMethod);
// call some service with caller and selector
[class2 dispatchSomeEvent:self callback:successCallback];
// here's the call back method
- (void) successMethod {
NSLog(@"Callback success");
}
}
第2课:
// some event
- (void) dispatchSomeEvent:(id) caller selector:(SEL) successCallback {
// catch the event and execute callback
if ([caller respondsToSelector:successCallback]) {
[caller successCallback];
}
}
条件respondsToSelector将通过,但下一行的回调将失败。但是,如果我愿意这样做:
// catch the event and execute callback
if ([caller respondsToSelector:successCallback]) {
[caller successMethod];
}
因此,不是使用我传递的选择器,而是直接输入方法名称......它可以工作!
我得到的错误是:
无法识别的选择器发送到实例 0x6c37f70
这里发生了什么?
提前致谢!
答案 0 :(得分:3)
您应该使用-performSelector
方法调用您的选择器:
if ([caller respondsToSelector:successCallback]) {
[caller performSelector:successCallback];
}