1

这是一个问答,希望能帮助遇到此问题的其他人。当我在控件之间传输 FirstResponder 链时,这个问题似乎是随机发生的。

控件是自定义控件对象,继承自UIViewaUITextFieldUITextView添加为子视图(与其他控件)并完全在代码中生成。

并非生成的控件的每个实例都会引发异常,但无论是否调用了代码或是否被点击了,都会始终如一地textfield/textview这样[text becomeFirstResponder]textfield/textview

我在这个上扯了大约6个小时的头发......

4

3 回答 3

1

基本自定义控件有一个布尔值“firstResponder”,我用它来跟踪屏幕上的哪个自定义控件应该首先开始编辑。

初始化代码如下:

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

当 firstResponderAttribute 为 YES 时,控件抛出错误,当它为 NO 时,控件正常。显然,当将“firstResponder”设置为 NO (==0x0) 时,响应者链看到的值为 nil,但是当它设置为 YES(错误消息中的 ==0x1)时,响应者链试图访问地址处的对象0x1 和失败。

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

附带说明一下,Analyze 没有发现这个问题,我也没有在 Apple 文档中找到任何关于该值的参考(尽管我看起来不是很努力......)

于 2014-02-20T11:14:15.670 回答
1

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

于 2015-07-12T06:53:02.490 回答
0

有时,当您在底部查看或不在屏幕/超级视图上查看时,您会得到

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];
        });
于 2014-06-23T10:24:51.923 回答