Я немного озадачен, и я работал над этим часами и поиском без каких-либо реальных проводов. Я хочу создать обратный вызов в объекте-c для моего iPhone-приложения, используя @selector.@selector в объективе-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
Что здесь происходит ??
Заранее благодарен!
Компилятор должен извергать предупреждение, что абонент не отвечает на successMethod. – bbum
Обратный вызов 'successMethod' должен давать вам синтаксическую ошибку, если этот код является дословным. Вы не можете определять методы внутри других методов. – JeremyP