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

标签 ios swift exception properties

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

但是,我收到了一个令人恼火的 EXC_BREAKPOINT 错误,没有其他详细信息。

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

错误断点:

Error Breakpoint

调试器值:

Both fields populated

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

enter image description here

最佳答案

因为将 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/

相关文章:

.net - 为什么 .NET 中没有 ArgumentEmptyException?

ios - 在 CreateML 中重新导入 mlmodel

ios - 合并按钮操作以减少重复

python - 操作错误 : (2001, "Can' t 创建 UNIX 套接字 (24)")

ios - layoutSubviews() 和 viewWillLayoutSubviews() 的区别

ios - 将 UIWebView 上的 ScreenEdgePanGesture 传递给父 PageViewController

java - 当 API 引入新的异常类型时编写向前兼容的代码

ios - 快速从类(class)中执行转场

objective-c - 标签栏作为 View Controller 顶层 View 的 subview ;画得不正确

ios - TableView 行需要删除两次才能从 UI 中删除吗?