【问题标题】:iOS9 keyboard crash on dismissiOS9键盘在关闭时崩溃
【发布时间】:2016-02-06 02:02:10
【问题描述】:

我有这个在 iOS9 之前运行良好的登录屏幕。键盘有一个从用户名字段到密码字段的下一步按钮,以及一个用于关闭键盘的完成按钮。但是,在 iOS 9 上它会崩溃。我在 8.4 上对其进行了测试,并且可以正常工作。在 iOS 9.0 和 9.1 上它会崩溃。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField == usernameField) {
        [passwordField becomeFirstResponder];
    } else if (textField == passwordField) {
        [textField resignFirstResponder];
    }
    return NO;
}

我正确设置了委托。

所以基本上,当我按“下一步”或“完成”时 崩溃:

CoreFoundation`__CFTypeCollectionRetain:
    0x2239dd5c <+0>:   push   {r4, r5, r7, lr}
    0x2239dd5e <+2>:   add    r7, sp, #0x8
    0x2239dd60 <+4>:   mov    r4, r1
    0x2239dd62 <+6>:   cbz    r4, 0x2239ddc4            ; <+104>
    0x2239dd64 <+8>:   ldrd   r0, r1, [r4]
    0x2239dd68 <+12>:  cmp    r0, #0x0
    0x2239dd6a <+14>:  ubfx   r1, r1, #0x8, #0xa
    0x2239dd6e <+18>:  beq    0x2239dda2                ; <+70>
    0x2239dd70 <+20>:  movw   r2, #0x7254
    0x2239dd74 <+24>:  movt   r2, #0x14d1
    0x2239dd78 <+28>:  add    r2, pc
    0x2239dd7a <+30>:  ldr    r2, [r2]
    0x2239dd7c <+32>:  cmp    r0, r2
    0x2239dd7e <+34>:  beq    0x2239dda2                ; <+70>
    0x2239dd80 <+36>:  movw   r2, #0x6240
    0x2239dd84 <+40>:  movt   r2, #0x14d1
    0x2239dd88 <+44>:  add    r2, pc
    0x2239dd8a <+46>:  ldr.w  r5, [r2, r1, lsl #2]
    0x2239dd8e <+50>:  cmp    r0, r5
    0x2239dd90 <+52>:  beq    0x2239dda2                ; <+70>
    0x2239dd92 <+54>:  tst.w  r0, #0x1
    0x2239dd96 <+58>:  beq    0x2239ddae                ; <+82>
    0x2239dd98 <+60>:  mov    r0, r4
    0x2239dd9a <+62>:  blx    0x2243208c                ; symbol stub for: -[__NSFileSecurity getGroup:]
    0x2239dd9e <+66>:  cmp    r0, r5
    0x2239dda0 <+68>:  bne    0x2239ddae                ; <+82>
    0x2239dda2 <+70>:  mov    r0, r4
    0x2239dda4 <+72>:  movs   r1, #0x0
    0x2239dda6 <+74>:  pop.w  {r4, r5, r7, lr}
    0x2239ddaa <+78>:  b.w    0x222e6ce8                ; _CFRetain
    0x2239ddae <+82>:  movw   r0, #0x3256
    0x2239ddb2 <+86>:  movt   r0, #0x13fb
    0x2239ddb6 <+90>:  add    r0, pc
    0x2239ddb8 <+92>:  ldr    r1, [r0]
    0x2239ddba <+94>:  mov    r0, r4
    0x2239ddbc <+96>:  pop.w  {r4, r5, r7, lr}
    0x2239ddc0 <+100>: b.w    0x22430e10                ; objc_msgSend$shim
    0x2239ddc4 <+104>: movw   r0, #0x332e
    0x2239ddc8 <+108>: movs   r3, #0x0
    0x2239ddca <+110>: movt   r0, #0x1223
    0x2239ddce <+114>: movw   r2, #0x116d
    0x2239ddd2 <+118>: add    r0, pc
    0x2239ddd4 <+120>: movt   r2, #0xc
    0x2239ddd8 <+124>: ldr    r0, [r0]
    0x2239ddda <+126>: add    r2, pc
    0x2239dddc <+128>: strd   r2, r3, [r0, #8]
->  0x2239dde0 <+132>: trap   
    0x2239dde2 <+134>: nop    

崩溃发生在带有'->'的行

我看到了这篇文章,但没有帮助: iOS9 dismissing keyboard causes crash

我真的可以使用一些帮助来解决这个问题。

提前致谢!

编辑: 我发现,它与我的 UIFont 类别有关,为所有视图提供我的自定义字体。

【问题讨论】:

  • 是否启用了异常断点?
  • 试过了,但同样的问题和同样的日志
  • 你在用字体做一些不寻常的事情吗?甚至可以更改任何文本字段的字体?
  • 看到这个链接可能对你有帮助stackoverflow.com/questions/25960255/…
  • @Avi 我使用自定义字体是的

标签: ios objective-c iphone keyboard


【解决方案1】:

我认为....

问题在于 UIViewController 类别

dealloc 方法被重写以清理通知回调。

它导致了 iOS 9 的崩溃。可能是因为 [super dealloc] 没有被调用(由于 ARC 限制)

解决方案 - 从类别中删除 dealloc 方法到 UIViewController 子类.....

【讨论】:

  • 如果您点击我问题中的链接,那正是它所说的内容,就像我提到的那样,它没有帮助。
【解决方案2】:

Sooo,该解决方案似乎与键盘几乎无关。我有一个通过创建 UIFont 类别来设置的 CustomFont。在那个类别中,我换掉了一些方法来为所有 UI 元素提供 customFont。不知何故,该应用程序运行良好,直到 textField 完成编辑,然后我很可能换掉了一个在 iOS 9 更新后不存在的方法。通过注释掉该行,一切都恢复了。谢谢大家。

【讨论】:

    【解决方案3】:

    先设置textfield标签,然后放这段代码

    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        NSInteger nextTag = textField.tag + 1;
        // Try to find next responder
        UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
        if (nextResponder) {
            // Found next responder, so set it.
            [nextResponder becomeFirstResponder];
        } else {
            // Not found, so remove keyboard.
            [textField resignFirstResponder];
        }
        return NO;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-09
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2019-08-21
      相关资源
      最近更新 更多