【问题标题】:Subclassing UIButton giving me errors子类化 UIButton 给我错误
【发布时间】:2019-02-27 20:42:52
【问题描述】:

当我运行应用程序并按下按钮时,它会导致崩溃“线程 1:EXC_BAD_ACCESS(code=2, address=0x108656e70)

class MyButton: UIButton{

   var myValue: Bool

    required init?(coder aDecoder: NSCoder) {
       fatalError("init(coder:) has not been implemented")
       myValue = true
       super.init(coder: aDecoder)
    }
}

class MyViewController: UIViewController{

    //changed datatype from UIButton
    @IBOutlet var manyButtons: [MyButton]!

    @IBAction func buttonPressed(_ sender: MyButton){

        //Error here "Thread 1: EXC_BAD_ACCESS(code=2, address=0x108656e70)"

        print(sender.myValue)

    }
}

顺便说一句,我注意到我无法像往常一样连接故事板中的按钮(cntrl 并拖动到插座)。我首先将“manyButtons”声明为 UIButton,以使我能够从我的情节提要中连接它们。然后后来我将数据类型更改为 MyButton。我相信我对 IBAction 也做了同样的事情

【问题讨论】:

  • 实际上,您应该立即在init?(coder 中获得(毫无意义的)fatalError。很可能按钮的类未设置为 Interface Builder 中的子类。
  • FML,就是这样。我没有让 MyButton 成为界面生成器上的自定义类。

标签: swift uibutton


【解决方案1】:

你需要

class MyButton: UIButton{ 
   var myValue = true 
    required init?(coder aDecoder: NSCoder) {  
       super.init(coder: aDecoder)
    }
}

线

fatalError("init(coder:) has not been implemented")

可能导致未知的崩溃,所以这不是它的地方,因为当从 IB 加载按钮时,你不想导致崩溃,方法 required init?(coder aDecoder: NSCoder) 被调用

这里的错误异常意味着该操作无法将 IB 中的按钮转换为发送方当前类型,这意味着您错误地设置了类名

@IBAction func buttonPressed(_ sender: MyButton){

并验证将(_ sender: MyButton){ 更改为(_ sender: UIButton){ 然后重新运行

【讨论】:

  • 我单击了故事板上的按钮并将其类更改为 MyButton。它解决了问题
【解决方案2】:

在身份检查器中选择“MyButton”作为自定义类

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多