2010-08-01 49 views
2

我有点困惑,我一直在这个小时工作,并没有任何真正的潜在客户。我想在使用@选择器的iPhone应用程序的objective-c中创建一个回调函数。@selector在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"); 
    } 
} 

二级:

// 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

编译器应该喷涌时,来电者并不successMethod回应警告。 – bbum 2010-08-01 20:48:16

+0

如果此代码是逐字记录的,回调函数'successMethod'应该会给你一个语法错误。您不能在其他方法中定义方法。 – JeremyP 2010-08-02 08:04:56

回答

3

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

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

没关系。我正在密集。 :) – bbum 2010-08-01 20:47:28

+0

谢谢弗拉基米尔。 – 2010-08-03 13:14:47