iphone - Objective-c 中的@selector 行为不符合预期

标签 iphone objective-c callback selector

我有点困惑,我已经为此工作了几个小时,并在谷歌上搜索,但没有任何真正的线索。我想利用 @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/

相关文章:

c++ - 如何对回调函数抛出的异常进行单元测试

iphone - 图像编辑问题

iphone - 发送json数据到服务器

iphone - 最终 TableView :heightForRowAtIndexPath: solution

objective-c - 如何更改 iPhone 中 backBarButton 的 TintColor

ruby-on-rails - 为什么花括号 on Rails 回调?

javascript - 试图理解回调函数的学生

iPhone,如何设置 View 背景,如设置屏幕灰色样式?

iphone - 删除XCode中针对不同目标的代码链接-iAds

objective-c - 如何在 Mac WebView 上启用捏合缩放?