我已经浏览过Stackoverflow
并发现了类似的问题,但我仍然无法理解,因为我似乎正在正确地做这件事。
所以我有自定义单元格的表格视图。每当我尝试删除给定部分中的最后一行时,应用程序崩溃并给出以下错误消息:
更新后表视图中包含的部分数 (1)必须 等于表格视图中包含的部分数量 更新(2),加上或减去插入或删除的部分数量(插入0,删除0)。
这是我的代码:
// shifts = [[Shift]] (Shift is my class)
func numberOfSections(in tableView: UITableView) -> Int {
return shifts.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return shifts[section].count
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Removing the element from my list
shifts[indexPath.section].remove(at: indexPath.row)
// Removing empty lists if there are any
var indexes = [Int]()
for i in 0..<shifts.count {
if shifts[i].count == 0 {
indexes.append(i)
}
}
var count = 0
for number in indexes {
shifts.remove(at: number-count)
count += 1
}
// Deleting the row in the tableView
myTableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.bottom)
}
其他帖子在numberOfSections
和numberOfRowsInSections
方法中存在问题,但我的方法返回列表的计数,因为我在删除行之前从列表中删除了元素,无法弄清楚问题。
编辑添加Lion建议的代码仍然会引发错误。
if tableView.numberOfRows(inSection: indexPath.section) > 1 {
myTableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.bottom)
} else {
let indexSet = NSMutableIndexSet()
indexSet.add(indexPath.section - 1)
myTableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.bottom)
myTableView.deleteSections(indexSet as IndexSet, with: UITableViewRowAnimation.bottom)
}
编辑2:解决方案以上代码出错,导致错误。
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Removing the element from my list
shifts[indexPath.section].remove(at: indexPath.row)
// Removing empty lists if there are any
var indexes = [Int]()
for i in 0..<shifts.count {
if shifts[i].count == 0 {
indexes.append(i)
}
}
var count = 0
for number in indexes {
shifts.remove(at: number-count)
count += 1
}
// Deleting the row in the tableView
if tableView.numberOfRows(inSection: indexPath.section) > 1 {
myTableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.bottom)
} else {
let indexSet = NSMutableIndexSet()
indexSet.add(indexPath.section) // This line was wrong in above code.
myTableView.deleteSections(indexSet as IndexSet, with: UITableViewRowAnimation.bottom)
}
}
答案 0 :(得分:3)
一旦尝试 myTableView.deleteSections(<#T##sections: IndexSet##IndexSet#>, with: <#T##UITableViewRowAnimation#>)
而不是删除行,我的意思是提交editStyle方法中的deleteRow
!
更新:
这是因为如果您的部分没有元素,那么您正在从数据源中删除部分我的意思是数组!那么,那时你必须删除部分,如
{{1}}
当您删除行时,如果它不是最后一个,那么您可以使用{{1}}但如果要删除最后一行,则必须删除该部分,此时不要删除行!
或者像我之前提到的那样重新整理整个表格!