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 会这样做(展开) .
这里是菜鸟。
我正在使用 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 会这样做(展开) .