【问题标题】:what does Error "Thread 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)" mean?错误“线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)”是什么意思?
【发布时间】:2015-05-02 12:02:23
【问题描述】:

我收到了这个错误:

线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

我该如何解决这个问题?代码正常工作,但是在计算器中,当我单击唯一的相等按钮时,它会给出错误。

@IBAction func equals(sender: AnyObject) {

    secondNumber = Screen.text!.toInt()!  // here it shows an error which is "Thread 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)"

    if operation == "+"{
        result = firstNumber + secondNumber
    }
    else if operation == "-" {
        result = firstNumber - secondNumber
    }
    else if operation == "x" {
        result = firstNumber * secondNumber
    }
    else {
        result = firstNumber / secondNumber
    }
    Screen.text = "\(result)"
}

【问题讨论】:

  • 在这一行中result = firstNumber / secondNumber 当secondNumber 等于0 时会发生什么?
  • 是的,我知道它是未定义的,那么我该如何解决呢?
  • “将一个数字除以零 (i / 0),或尝试用零计算余数 (i % 0),会导致错误。” - The Swift Programming Language - Advanced Operators

标签: ios swift exception runtime-error


【解决方案1】:

通常,EXC_BAD_INSTRUCTION 表示您的代码中存在断言失败。一个疯狂的猜测,你的Screen.text 不是整数。仔细检查它的类型。

【讨论】:

    【解决方案2】:

    这一行

    secondNumber = Screen.text!.toInt()!
    

    意思是:获取Screen对象,获取text属性不存在则crash,然后将text转化为整数,不存在则crash。

    这就是! 的意思:“我确定这个东西存在,所以如果它不存在,请崩溃”。崩溃就是它所做的。

    【讨论】:

    • 我读过的关于力解包真正含义的最佳解释。
    • @samurai_jane 同意
    【解决方案3】:

    我是关于

    dispatch_group_leave(组)

    如果在块中关闭,则在里面。我刚刚把它移开了。

    【讨论】:

    • 我想我有同样的问题,我知道这是在 17 年。这是我的代码。如果你能帮我弄清楚你到底做了什么,那就太好了: if(aGroup == nil) { block(); } else { dispatch_async(serialQueue, ^{ dispatch_group_enter(aGroup); block(); dispatch_group_leave(aGroup); }); } 通过闭包=,你的意思是块吗?所以我只是把它放在 });对吗?
    【解决方案4】:

    在我的情况下,这是由整数溢出引起的。我有一个 UInt16,并且将值加倍以放入 Int。错误代码是

    let result = Int(myUInt16 * 2)
    

    但是,这乘以 UInt16,然后转换为 Int。因此,如果 myUInt16 包含超过 32767 的值,则会发生溢出。

    我将代码更正后一切都很好

    let result = Int(myUint16) * 2
    

    【讨论】:

    • 非常感谢!这节省了我很多时间!我试图计算 UInt8 值列表的平均值。当我计算总和时,我得到了溢出!
    【解决方案5】:

    当我尝试从不同的线程同时写入一个变量时,我收到了这个错误。创建一个私有队列并确保一次一个线程可以同时写入该变量。就我而言,这是一本字典。

    【讨论】:

      【解决方案6】:

      我的是 DispatchQueue.main.sync 在更近的地方,我把它做成 DispatchQueue.main.async 并且它起作用了。

      【讨论】:

      • 我遇到了同样的错误。为什么你认为sync 会抛出错误? async 不是吗?
      • @J.beenie 导致死锁
      【解决方案7】:

      如果其他人收到了类似的错误消息,您可能构建了带有优化(生产)标志的应用程序,这就是错误消息不具有交流性的原因。您在开发中遇到错误的另一种可能性(从 i386 我知道您使用的是模拟器)。如果是这种情况,请将构建环境更改为开发环境并尝试重现该情况以获得更具体的错误消息。

      【讨论】:

        【解决方案8】:

        您的 secondNumber 似乎是一个 ivar,因此您必须使用本地 var 来解开可选项。并且小心。您不测试 secondNumber 是否为 0,这可能导致除以零。从技术上讲,您需要另一个案例来处理不可能的操作。例如检查数字是否为 0 并且在这种情况下不执行任何操作至少不会崩溃。

        @IBAction func equals(sender: AnyObject) {
        
            guard let number = Screen.text?.toInt(), number > 0 else {
                return
            }
        
            secondNumber = number
        
            if operation == "+"{
                result = firstNumber + secondNumber
            }
            else if operation == "-" {
                result = firstNumber - secondNumber
            }
            else if operation == "x" {
                result = firstNumber * secondNumber
            }
            else {
                result = firstNumber / secondNumber
            }
            Screen.text = "\(result)"
        }
        

        【讨论】:

          【解决方案9】:

          在我的情况下,它发生在通过传递 Core Data 托管对象的属性的参数来调用函数时。调用时该对象已不存在,导致此错误。

          我通过在调用函数之前检查托管对象是否存在解决了这个问题。

          【讨论】:

            【解决方案10】:

            我在 WatchOS Sim 上得到了这个。即使在以下情况下问题仍然存在:

            • 删除应用程序
            • 重启 Xcode
            • 删除派生数据

            ...最终通过模拟器中的“擦除所有内容和设置”修复。

            【讨论】:

              【解决方案11】:

              尝试清除工作区。

              rm -rf ' ~/Library/Application\ Support/"your programm name" '
              

              【讨论】:

                猜你喜欢
                • 2016-05-13
                • 1970-01-01
                • 1970-01-01
                • 2015-10-19
                • 2016-12-06
                • 1970-01-01
                • 2021-11-03
                相关资源
                最近更新 更多