文本becomeFirstResponder抛出EXC_BAD_ACCESS代码= 1地址= 0x1

问题描述:

这是一个Q & A希望能够帮助遇到此问题的其他人。这个问题似乎随机发生,而我正在为控件之间的FirstResponder链传输。文本becomeFirstResponder抛出EXC_BAD_ACCESS代码= 1地址= 0x1

对照是从UIView继承与无论是UITextFieldUITextView加入作为一个子视图(与其他控制)和完全在代码生成定制控制的对象。

不中生成的控件的每个实例抛出异常,而是做了那些这样做的一贯是否textfield/textview曾呼吁在代码[text becomeFirstResponder],或textfield/textview被窃听的。

我撕裂我的头发,约6小时就这一个...

基础自定义控件有一个布尔值“firstResponder”这是我用跟踪哪些自定义控件的上屏幕应该先开始编辑。

在初始化代码是下面的:

if([firstResponderAttribute isEqualToString:@"YES"]) firstResponder=YES; else firstResponder=NO;

当firstResponderAttribute是YES控制投掷该错误,当它是NO,控制很好。显然,在将'firstResponder'设置为NO(== 0x0)时,响应者链看到的值为nil,但是当它设置为YES(错误消息中的== 0x1)时,响应者链试图访问地址处的对象0x1并失败。

解决方案?不要在任何UIView子类中使用firstResponder作为值!

在一个侧面说明没有被分析拿起这个问题,我还没有发现在苹果文档的价值的任何引用(虽然我没有看过很辛苦......)

+0

http://www.touch-code-magazine.com/debug-exc_bad_access-follow-up是什么twigged到第一个应答变量作为问题 –

有时候,当图上没有显示在屏幕/上海华底部或视图现在你

EXC_BAD_ACCESS 
/* when you try*/ 
[responder becomeFirstResponder] 
/*or*/ 
[super becomeFirstResponder]; 

过会儿再去做。例如(做时,在屏幕上查看/ view_with_responder:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
      [_toTokenField becomeFirstResponder]; 
     }); 

我得到这个崩溃时的UITextField delegate是零确保例如委托未在NIB文件,其中设置为“文件的所有者”。该字段为零