我正在尝试创建一个包含动态数量的部分的表。这导致tableView.moveRow崩溃,即使我在调用它之前更新了数据源。
E.g。)
A B | ---列表中的A和B. section = 1,section = 2
中的行数A | B --- A在第0节和B在第1节中。节数= 2,每节中的行= 1
我在-[UITableView _endCellAnimationsWithContext:]
中一直收到断言,我想知道这是否是UITableView无法触及的,或者我的代码中是否有错误?
我的代码是
let (fromPath, toPath) = viewModel.moveItem(A) // Creates new section and moves A to the new section below
dprint("Move \(A.name) from \(fromPath) to \(toPath)")
tableView.moveRow(at: fromPath, to: toPath)
输出
将A从[0,0]移动到[1,0]
2018-01-23 13:59:45.705931 + 0100 MyApp [44553:638288] ***断言失败 - [UITableView _endCellAnimationsWithContext:],/ BuildRoot / Library / Cache / com.apple.xbs / Source / UIKit_Sim /UIKit-3698.33.6/UITableView.m:1826
答案 0 :(得分:1)
使用tableView
和tableView.beginUpdates()
附加对tableView.endUpdates()
的更改。
此外,您还必须注意创建新的部分,而更改数据模型将在数据中创建一个新部分,您必须告诉tableView
在移动行之前插入一个新部分:
let (fromPath, toPath) = viewModel.moveItem(A) // Creates new section and moves A to the new section below
dprint("Move \(A.name) from \(fromPath) to \(toPath)")
tableView.beginUpdates()
if newSectionWasCreated {
tableView.insertSections([toPath.section], with: .automatic)
}
tableView.moveRow(at: fromPath, to: toPath)
tableView.endUpdates()
您必须根据模型弄清楚如何自己确定newSectionWasCreated
。