Как ведет себя RespondsToSelector, когда присутствует делегат? - PullRequest
2 голосов
/ 04 мая 2011

Я недавно попытался создать подкласс UITextField и установить делегата для себя (нашел это, пытаясь решить мою проблему: http://www.cocoabuilder.com/archive/cocoa/241465-iphone-why-can-a-uitextfield-be-its-own-delegate.html)

@interface MyObject :UITextField <UITextFieldDelegate>
@end

@implementation MyObject

-(id) initWithFrame:(CGRect) frame
{
  if((self=[super initWithFrame:frame]))
  {
      self.delegate=self;
  }
  return self;
}

-(BOOL) respondsToSelector:(SEL)selector
{
    NSLog(@"responds to selector");
    return [super respondsToSelector:selector];
}

// Implement all the missing methods
@end

Вызов метода, определенного в интерфейсе, приводит к бесконечной рекурсии. Я не вижу в документах Apple ничего, что определяло бы, как откликает себя вести себя в присутствии делегата.

1 Ответ

5 голосов
/ 04 мая 2011

docs для respondsToSelector гласит следующее:

Вы не можете проверить, наследует ли объект метод от своего суперкласса, отправив responsedsToSelector: объекту, используя суперключевое слово.[..] Следовательно, отправка responsedsToSelector: to super эквивалентна отправке его себе. Вместо этого вы должны вызывать метод класса NSObject instancesRespondToSelector: непосредственно в суперклассе объекта

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

...