9

我相信我在 iOS 7 中遇到了一个错误。当 UITextView 包含在模态视图中时,将其 inputview 属性从自定义视图更改为 nil(以恢复系统键盘)将导致应用程序崩溃模态视图被关闭后。

此崩溃仅在 iOS 7 下发生。以前的 iOS 版本没有出现此问题。

我写了一个小示例应用程序来演示这个问题。编译启动应用程序并执行以下操作:

  1. 点击按钮“显示 TextView”。这将呈现一个包含 UITextView 和三个按钮的模态 ViewController。
  2. 点击按钮“将 inputview 设置为 emptyView”。这将创建一个空的 UIView 并将其分配给 UITextView 的 inputview 属性。
  3. 点击按钮“将输入视图设置为零”。这会将 nil 分配给 UITextView 的 inputview 属性。这样做是为了显示系统键盘。
  4. 点击按钮“关闭 ViewController”。这将关闭视图控制器以返回原始视图控制器。

一旦 ViewController 被解除,应用程序立即崩溃。崩溃日志有时(但并非总是)指的是被发送到对象的无法识别的选择器。每次重现崩溃时,对象的类型都不同。

有没有其他人遇到过这种错误?

4

3 回答 3

5

对不起,我不是很了解你。这是一个不会导致崩溃的解决方案。

UIView* emptyView;

-(IBAction)setToEmpty:(id)sender {
    [self.textView resignFirstResponder];
    if (emptyView == nil)
        emptyView = [[UIView alloc] initWithFrame:CGRectZero];
    self.textView.inputView = emptyView;
    [self.textView becomeFirstResponder];
//    emptyView = nil;    // If you comment out the this line, the app will crash
}

如果启用僵尸对象,您会看到以下错误:

CrashTest[16706:a0b] * -[UIView _overrideInputViewNextResponderWithResponder:]:消息发送到释放实例 0x8e88680

ios7 中的 ARC 以不同的方式工作。显然你不能在关闭 mainView 之前释放对象,它是 firstResponder。

于 2013-11-15T04:27:22.943 回答
1
@implementation NoKbTextField

static UIView *customInput;

- (UIView *) inputView {

    if (customInput == nil) {
        customInput = [[UIView alloc] init];
        customInput.backgroundColor = [UIColor clearColor];
    }
    return customInput;
}
于 2013-11-14T05:39:47.550 回答
0

完全一样的问题,吃了我4个小时。

出于某种原因我们不使用 ARC,所以通常情况下,我们应该释放视图,但事实是如果你释放视图,它会崩溃:

[UIView _overrideInputViewNextResponderWithResponder:]: message sent to deallocated instance 0x8e88680

仅在 iOS 5.0.1 和 7.0 中测试过,5.0.1 就可以了。

于 2013-12-04T08:36:02.243 回答