【问题标题】:EXC_BAD_INSTRUCTION when extending UIView扩展 UIView 时的 EXC_BAD_INSTRUCTION
【发布时间】:2014-07-25 06:59:55
【问题描述】:

我正在尝试为我正在使用的 iOS8 键盘创建我自己的自定义视图类,当我创建一个扩展 UIView 的新类时,我在加载键盘时崩溃并出现 Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,subcode=0x0) 错误.错误显示在class KeyButton: UIView { 行上,我正在努力进一步调试。我最初试图扩展UIButton,但没有成功,所以我将其更改为UIView,但没有进一步的运气。

我知道 Swift/iOS8 会有一些初期问题,但希望这是可以解决的!

编辑

全类代码:

import UIKit

class KeyButton: UIView { /* This is where the app crashes, apparently */

    init(frame: CGRect) {
        super.init(frame: frame)
        // Initialization code
    }

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

}

【问题讨论】:

  • 你能给我们看一些代码吗?如果不查看问题的根源,就很难诊断问题。
  • 我创建了一个新的 Cocoa Touch 类,让它扩展 UIView,然后将 UIView 拖入我的键盘笔尖,并将类更改为 KeyButton。将主笔尖中的视图设为UIView 不会使应用程序崩溃,而将其设为keyButton 会使应用程序因上述错误而崩溃。没有代码被修改,但我会发布课程的完整代码
  • 奇怪...你也可以发布回溯吗?
  • 控制台中只有(lldb)(调试扩展很有趣!),但我想我有回溯,突出显示在dropbox.com/s/8xmylpptdhvpk7w/…崩溃的部分

标签: ios swift ios8


【解决方案1】:

我最近遇到了类似的问题,但想通了。事实证明,在 iOS 8 中,而不是在 iOS 7 中,initWithCoder(在 Objective-C 中)是必需的。您所要做的就是将以下内容添加到您的课程中:

init(coder aDecoder: NSCoder!)
{
    super.init(coder: aDecoder)
}

希望对你有帮助!

【讨论】:

  • 这可能会解决使用 nib 创建它的问题,但我已继续通过代码 (let customButton: KeyButton = KeyButton.buttonWithType(UIButtonType.System) as KeyButton) 创建它,但仍然崩溃。很难知道问题是什么,因为当它崩溃时,它不会给出有用的错误(只是说它被中断了)。如果没有出现其他答案,我将对此进行测试并标记为正确。
  • 抱歉,站点处于只读模式。这确实解决了问题,谢谢!多么奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
相关资源
最近更新 更多