iOS 应用程序在带有滑块的大量表格单元格上崩溃
Posted
技术标签:
【中文标题】iOS 应用程序在带有滑块的大量表格单元格上崩溃【英文标题】:iOS app crashing on high numbers of table cells with sliders 【发布时间】:2017-05-27 10:36:06 【问题描述】:这里是菜鸟。
我正在使用 Swift 3 在 ios 中以编程方式创建多个 UISliders (globalCount
)。grandTotal
浮点值在这些滑块的值之间进行划分,当一个值被更改时,它们都调整为总和为 100% grandTotal
。没有滑块低于最小值 0 或高于最大值 100。
对于小于 7 的滑块数量,一切都运行良好。只要我添加 7 个或更多。尝试使用基础结构值更新单元格的滑块值时发生崩溃。
我已将单元格更新功能移至其自己的功能以尝试隔离问题。我仍然会崩溃。崩溃是
EXC_BAD_INSTRUCTION(代码=EXC_1386_INVOP,子代码=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
我的用户界面:
【问题讨论】:
【参考方案1】:cellForRow(at:)
返回nil
如果表格视图单元格不可见(当前不在屏幕上)。您正在崩溃,因为您正在强制解开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
【讨论】:
你为什么说它在屏幕外?还是第二列不在屏幕上? 有根据的猜测。 OP说“添加7个或更多”。我认为他的屏幕空间不足,迫使单元格离开屏幕。 太棒了!谢谢。会试一试【参考方案2】:这是由于使用强制展开导致崩溃。
最方便的方法是使用 if let 语句来检查数据是否存在,因为 if let 会执行此操作(展开)。
【讨论】:
以上是关于iOS 应用程序在带有滑块的大量表格单元格上崩溃的主要内容,如果未能解决你的问题,请参考以下文章
在uitableview单元格上留下滑动删除按钮打开然后返回导致崩溃