自定义UITextField委托

时间:2012-08-30 21:39:22

标签: ios uitextfield automatic-ref-counting

我有一个uitextfield子类,在init方法和setDelegate我有这个:

- (void) setDelegate:(id<UITextFieldDelegate>)paramDelegate{
    [super setDelegate:paramDelegate];

    MRAAdvancedTextFieldDelegate *limitedDelegate = [[MRAAdvancedTextFieldDelegate alloc] init];
    self.delegate = limitedDelegate;
}

我正在使用ARC,但这会导致BAD_ACCESS。有任何想法吗?

2 个答案:

答案 0 :(得分:0)

您在self.delegate = limitedDelgate方法中撰写setDelegate:。这与调用[self setDelegate:limiatedDelegate]完全相同。由于您在-setDelegate:方法本身内,因此导致了英特尔递归。希望这有帮助!

编辑:根据您对意图的评论,将其覆盖如下:

- (void) setDelegate:(id<UITextFieldDelegate>)paramDelegate{
    MRAAdvancedTextFieldDelegate *limitedDelegate = [[MRAAdvancedTextFieldDelegate alloc] init];
    [super setDelegate:limitedDelegate];
}

但是我不相信这样做是个好主意 - 你应该让你的客户代码在代理的实例中传递。

答案 1 :(得分:0)

self.delegate = limitedDelegate;

变成了

[self setDelegate:limitedDelegate];
编译器

导致无限循环。解决方案:而不是使用属性,而是在自定义setter方法中使用实例变量:

delegate = limitedDelegate;