我收到了这个错误:
主题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)"
}
答案 0 :(得分:68)
这一行
secondNumber = Screen.text!.toInt()!
表示:获取Screen对象,获取text属性,如果不存在则请崩溃,然后将文本转换为整数,如果不存在则请崩溃。
那是什么!意思是:它意味着“我确定这个东西存在,所以如果不存在则请崩溃”。这就是它的作用。
答案 1 :(得分:9)
通常,EXC_BAD_INSTRUCTION表示代码中存在断言失败。一个疯狂的猜测,你的Screen.text
不是整数。仔细检查它的类型。
答案 2 :(得分:8)
我的意思是
如果在封闭中,dispatch_group_leave(组)
在里面。我把它从封闭中移开了。
答案 3 :(得分:3)
就我而言,它是通过传递Core Data受管对象属性的参数来调用函数时发生的。在调用对象时,该对象已不存在,并且导致了此错误。
我通过在调用函数之前检查托管对象是否存在来解决此问题。
答案 4 :(得分:1)
当我尝试同时从另一个线程写入变量时,出现此错误。创建一个专用队列并确保一次有一个线程可以同时写入该变量。就我而言,这是一本字典。
答案 5 :(得分:0)
在我的情况下,这是由整数溢出引起的。我有一个UInt16,并且正在将值加倍以放入Int。错误的代码是
JPanel
但是,它乘以一个UInt16,然后转换为Int。因此,如果myUInt16包含的值超过32767,则将发生溢出。
我将代码更正后,一切都很好
let result = Int(myUInt16 * 2)
答案 6 :(得分:0)
答案 7 :(得分:0)
如果其他人也收到类似的错误消息,则您可能在构建该应用程序时启用了optimisations(production)标志,这就是为什么该错误消息没有那么可传达的原因。开发中出现错误的另一种可能性(从i386我知道您正在使用模拟器)。如果是这种情况,请将构建环境更改为开发环境,并尝试重现这种情况以获得更具体的错误消息。
答案 8 :(得分:0)
您的secondNumber似乎是一个ivar,因此您必须使用本地var来解开可选变量。小心点您无需测试secondNumber是否为0,否则可能导致被零除。从技术上讲,您需要另一个案例来处理不可能的操作。例如,检查数字是否为0,在这种情况下不执行任何操作至少不会崩溃。
neo4j://ip
答案 9 :(得分:0)
我在WatchOS Sim上得到了这个。即使在以下情况下,问题仍然存在:
...,并最终通过模拟器中的“删除所有内容和设置”进行了修复。
答案 10 :(得分:0)
尝试清除工作区。
@Produces