我正在使用属性 setter 和 didSet() 值来设置“完成百分比”属性。所有属性访问都在主队列中完成,我设置的属性没有钩子(Hook)或getters或setters,对象已完全初始化,我在计算中使用的字段都在那里。
但是,我收到了一个令人恼火的 EXC_BREAKPOINT 错误,没有其他详细信息。
我想这可能是一个多线程访问问题,但我在所有其他线程中只看到空堆栈。
错误断点:
调试器值:
调用堆栈(这些都是set或didSet):
最佳答案
因为将 22,667,272 乘以 99,所以出现整数溢出。使用 Int64 而不是 Int。
您可以在 32 位整数中存储的最大值是 2,147,483,647。 22,667,272 * 99 是 2,244,059,928,因此会发生整数溢出。 Int
的大小因架构而异,因此您的代码可以在 64 位设备上运行,但不能在 32 位设备上运行。如果您显式使用 Int64,您将避免溢出。
let totalBytes = Int64(self.bytesTotal)
let uploaded = Int64(self.bytesUploaded)
self.percentComplete = Int(1 + 99 * uploaded / totalBytes)
关于ios - 在主队列中设置属性时 Swift 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677562/