定制的UITextField委托
我有一个uitextfield
子类,并在init
方法和setDelegate
我有这样的:定制的UITextField委托
- (void) setDelegate:(id<UITextFieldDelegate>)paramDelegate{
[super setDelegate:paramDelegate];
MRAAdvancedTextFieldDelegate *limitedDelegate = [[MRAAdvancedTextFieldDelegate alloc] init];
self.delegate = limitedDelegate;
}
我使用ARC,但是这导致BAD_ACCESS。有任何想法吗?
您在setDelegate:
方法中写入self.delegate = limitedDelgate
。这与拨打[self setDelegate:limiatedDelegate]
完全相同。由于您处于-setDelegate:
方法本身之内,因此导致了infitine递归。希望这可以帮助!
编辑:根据您的了解你的意图评论,覆盖它是这样的:
- (void) setDelegate:(id<UITextFieldDelegate>)paramDelegate{
MRAAdvancedTextFieldDelegate *limitedDelegate = [[MRAAdvancedTextFieldDelegate alloc] init];
[super setDelegate:limitedDelegate];
}
但我不认为这是一个好主意,这样做 - 你应该有你的客户端代码传中的情况下,你的代替。
谢谢,但我如何确保当我在视图控制器中执行someTextField.delegate时,它不会设置? –
@MarioPen在你的问题上看到我的评论。为了提出进一步的解决方案,我需要更多地了解你想要做的事情。 –
我希望所有委托方法只能由给定的类来处理,因此我不想为该字段设置委托。因此,我为什么压倒二传手。 –
self.delegate = limitedDelegate;
是由编译器变成
[self setDelegate:limitedDelegate];
,导致无限循环。解决方案:而不是使用属性,使用实例变量,而不是定制的setter方法:
delegate = limitedDelegate;
我给了以下的答案,但实际上意识到我有点困惑,你要在这里完成的。你是否有两个独立的代表?或者扩展UITextFieldDelegate协议? –