在主队列中设置属性时Swift应用程序崩溃

时间:2016-07-30 19:05:46

标签: ios swift exception properties

我正在使用属性setter和didSet()值来设置"完成百分比"属性。所有属性访问都在主队列中完成,我设置的属性没有钩子或getter或setter,对象已完全初始化,我在计算中使用的字段都在那里。

但是,我收到一个令人愤怒的EXC_BREAKPOINT错误而没有其他细节。

我认为这可能是多线程访问问题,但我看到所有其他线程中只有空堆栈。

错误断点

Error Breakpoint

调试器值

Both fields populated

调用堆栈(这些都是set或didSet):

enter image description here

1 个答案:

答案 0 :(得分:3)

您将获得整数溢出,因为您将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)