@selector в target-c ведет себя не так, как ожидалось - PullRequest
2 голосов
/ 02 августа 2010

Я немного озадачен и работаю над этим часами и гуглю без всяких реальных подсказок.Я хочу создать обратный вызов в target-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];
   } 
}

условный responsedsoSelector пройдет, но обратный вызов на следующей строке не удастся.ОДНАКО, если бы я сделал так:

// catch the event and execute callback
if ([caller respondsToSelector:successCallback]) {
   [caller successMethod];
}

Поэтому вместо того, чтобы использовать селектор, который я передал, я ввожу имя метода напрямую ... и оно работает!

Ошибка Iget is this:

нераспознанный селектор отправлен в экземпляр 0x6c37f70

Что здесь происходит ??

Заранее спасибо!

1 Ответ

3 голосов
/ 02 августа 2010

Вы должны вызвать селектор, используя -performSelector метод:

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