iOS Swift – 某些设备上的EXC_BAD_INSTRUCTION
我对Swift和iOS开发很陌生,但遇到了一个错误,导致我的应用程序在以下设备上运行时崩溃:
iPhone 4S iPhone 5 iPad 2 iPad视网膜
这里是被标记的代码:
// bin2dec - converts binary string into decimal string func bin2dec(input: String) -> String { var counter = countElements(input) var digit: Character var power = 1 var result = 0 while counter > 0 { digit = input[advance(input.startIndex, counter-1)] switch digit { case "0": result += 0 case "1": result += 1 * power default: power = power / 2 break } counter-- power *= 2 } return "\(result)" }
和错误是:
Thread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)
任何帮助将不胜感激,谢谢!
iPhone 4S,iPhone 5,iPad 2,iPad Retina是32位设备,其中Int
是32位整数。 所以开始
var power = 1
然后打电话
power *= 2
32次会溢出并导致exception。 在Swift中,除非明确地使用“溢出运算符” &*
, &+
等,否则整数运算不会像(Objective-)C那样静静地“绕回”。
可能的解决scheme:
- 使用
Int64
而不是Int
。 - 避免
power
的最后乘法(其结果是不需要的)。
请注意,有一个简单的方法来将一串二进制数字转换为数字,请参阅示例如何将一个二进制转换为十进制的Swift? 。
- 苹果拒绝我的应用程序,由于崩溃,无法重现
- 应用程序被拒绝了两次,但不能在iOS 9.2上重现该问题。 我需要帮助确定它
- xcode gm ios 8 gm swift今天扩展崩溃在模拟器和设备:库未加载:@ rpath / libswiftCore.dylib
- 什么会导致这个SIGSEGV错误?
- 由于未捕获exception'CALayerInvalidGeometry',原因:'CALayer界限包含NaN:'
- VFR阅读器崩溃在iOS8
- 核心数据迁移失败
- 调用selectRowAtIndexPath时崩溃:animated:scrollPosition:
- 更改为iOS6后,应用程序崩溃 – ucol_getVersion