gpt4 book ai didi

在 uitableView 中删除行时 ios 应用程序崩溃

转载 作者:搜寻专家 更新时间:2023-11-01 05:49:25 25 4
gpt4 key购买 nike

我的 UITableView 中有一个问题,其中填充了 data: [(gamme: String, [(product: String, quantity: Double)])],一切正常:插入行和部分,删除行和部分,重新​​加载。但有时当我尝试快速删除大量行时(通过在表格中滑动行并点击 (-) 逐行删除)。它会导致崩溃,如屏幕截图所示。

此问题很难在开发应用程序中重现。但我的客户仍然报告它。我的客户是专业人士(不是普通用户),他们希望能够快速处理大中型数据。

enter image description here

这是我删除行的函数:

    override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

let delete = UITableViewRowAction(style: .destructive, title: "-") { (action, indexPath) in

let cmd = self.groupedData[indexPath.section].1.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .right)
self.delegate?.didDeleteCmdLine(cmd)

if self.groupedData[indexPath.section].1.count == 0 {
self.groupedData.remove(at: indexPath.section)
tableView.deleteSections(IndexSet(integer: indexPath.section), with: UITableViewRowAnimation.right)
}
}

return [delete]
}

为什么会这样?

这是崩溃的 xcode 管理器屏幕

enter image description here编辑:

检查 groupedData 是否被@Reinhard 提出的 main 以外的任何线程访问:

private var xgroupedData = [(gamme: GammePrdCnsPrcpl, [cmdline])]()

private var groupedData: [(gamme: GammePrdCnsPrcpl, [cmdline])] {
get {
if !Thread.isMainThread {
fatalError("getting from not from main")
}
return xgroupedData
}
set {
if !Thread.isMainThread {
fatalError("setting from not from main")
}
xgroupedData = newValue
}
}

但是 groupedData 变量只能从主线程访问

最佳答案

tableView.beginUpdates()
self.tableView.deleteRows(at: [indexPath], with: .automatic)
tableView.endUpdates()

关于在 uitableView 中删除行时 ios 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52590677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com