我有点困惑,我已经为此工作了几个小时,并在谷歌上搜索,但没有任何真正的线索。我想利用 @selector 在 Objective-C 中为我的 iPhone 应用程序创建回调。
第 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];
}
因此,我没有使用我传递的选择器,而是直接输入方法名称......并且它有效!
我得到的错误是这样的:
unrecognized selector sent to instance 0x6c37f70
这是怎么回事?
提前致谢!
最佳答案
您应该使用 -performSelector
方法调用您的选择器:
if ([caller respondsToSelector:successCallback]) {
[caller performSelector:successCallback];
}
关于iphone - Objective-c 中的@selector 行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3383623/