调用UITextField委托时,iPhone模拟器崩溃(使用EXC_BAD_ACCESS)

时间:2012-04-24 06:07:57

标签: ios5 uitextfield ios-simulator uistoryboard uitextfielddelegate

所以我的控制器里放了一些文字区域。

Controller扩展了UITextFieldDelegate,因此它为那些文本字段处理textFieldDidBeginEditing,并且一切正常!

然后我尝试从名为TestTextField的新类中添加一个新的文本字段。

我将故事板中的自定义类更改为TestTextField,并按以下方式实现: (结果是模拟器启动并且NSLog打印“init!”然后当我按下TestTextField时NSLog打印“begin”,之后模拟器停止EXC_BAD_ACCESS。)

TestTextField.m

#import "TestTextField.h"

@implementation TestTextField

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (id) initWithCoder:(NSCoder *) coder
{
    self = [super initWithCoder:coder];
    NSLog(@"init!");
    self.delegate = self;
    return self;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"begin");
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    NSLog(@"end ");

}

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    return YES;
}

@end

TextField.h

#import <UIKit/UIKit.h>

@interface TestTextField : UITextField <UITextFieldDelegate>

@end

3 个答案:

答案 0 :(得分:1)

我有完全相同的问题,这似乎只发生在iOS模拟器5上。

看起来在init设置委托会使应用程序崩溃。

只需评论self.delegate = self行即可消除错误。

所以我结束了(不是很好,但是呃)将我的self.delegate = self放在一个过载的- (void) touchesBegan:中。这样,我确定当有人开始输入时我的代理被设置了。

答案 1 :(得分:1)

我遇到过同样的问题。我终于通过调整autocorrectionType来解决这个问题。

请将您的文字字段设置为autocorrectionType = UITextAutocorrectionTypeNo;

希望这可以解决您的问题。

答案 2 :(得分:0)

到目前为止,我很确定发生了什么,因为这是很久以前的事了。

我99%肯定这个问题是由于XCode中的“自定义类”值留下了一些不再存在的旧值。