objective-c中的@selector表现不如预期

时间:2010-08-01 20:29:39

标签: iphone objective-c callback selector

我有点困惑,我一直在努力工作几个小时,谷歌搜索没有任何真正的线索。我想使用@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

这里发生了什么?

提前致谢!

1 个答案:

答案 0 :(得分:3)

您应该使用-performSelector方法调用您的选择器:

if ([caller respondsToSelector:successCallback]) {
  [caller performSelector:successCallback];
}