У меня есть проблема в моем UITableView, который заполнен data: [(gamme: String, [(product: String, quantity: Double)])]
, все работает нормально: вставка строк и разделов, удаление строк и разделов, перезагрузка.Но иногда и когда я пытаюсь удалить много строк быстрым способом (построчно, проведя строкой таблицу и коснитесь (-)).это приводит к сбою, как на скриншоте.
Проблема трудно воспроизвести в приложении для разработки.но мои клиенты все еще сообщают об этом.Мои клиенты - профессионалы (не обычные пользователи), и ожидается, что они будут быстро использовать средние и большие данные.
![enter image description here](https://i.stack.imgur.com/VbeS9.png)
, и это моефункция удаления строк:
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 для сбоя
Редактировать:
Проверка доступа к groupedData
из любого потока, кроме основного, предложенного @Reinhard:
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
переменная доступна только из основного потока