iOS 应用程序在 table 带有滑块的大量单元格上崩溃

iOS app crashing on high numbers of table cells with sliders

这里是菜鸟。

我正在使用 Swift 在 iOS 中以编程方式创建 UI 个滑块的数量 (globalCount) 3. grandTotal 浮点值分为这些滑块的值,当更改其中一个时,它们都会调整为总和为 grandTotal 的 100%。没有滑块低于其最小值 0 或高于其最大值 100。

对于少于 7 个的滑块,一切正常。只要我添加 7 个或更多。尝试使用基础结构值更新单元格的滑块值时发生崩溃。

我已将单元格更新功能移至它自己的功能中以尝试隔离问题。我仍然遇到崩溃。崩溃是

EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

并出现在 let loopCell 行。

有人对这是关于什么有什么建议吗?为什么它适用于低数量而不是高数量的细胞?这是条件语句吗?

这是小区更新功能

func updateCells() {
    for i in 0...globalCount - 1 {
        let loopCell: MyTableCell = ((myTableView.cellForRow(at: IndexPath(row:i, section: 0))) as? MyTableCell)!
        loopCell.valueLabel.text = String(structData[i].value)
        loopCell.cellSlider.value = structData[i].value
    }
}

我的UI:

cellForRow(at:) returns nil 如果 table 视图单元格不可见(当前在屏幕外)。你正在崩溃,因为你正在强制展开 nil。相反,使用可选绑定 (if let) 来安全地解包值:

func updateCells() {
    for i in 0..<globalCount {
        if let loopCell = myTableView.cellForRow(at: IndexPath(row: i, section: 0)) as? MyTableCell {
            loopCell.valueLabel.text = String(structData[i].value)
            loopCell.cellSlider.value = structData[i].value
        }
    }
}

因为用力解包导致崩溃。

最好的方法是使用 if let 语句来检查数据是否存在,因为 if let 会这样做(展开) .