当我从表视图中删除最后一行时:
tableView.deleteRows(at: [indexPath], with: .middle)
并将我的表格数据源更改为另一个数组:
if orders.isEmpty {
return ABCDArray.count
} else {
return orders.count
}
它给了我这个错误:
由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'无效更新:第0部分中的无效行数。更新后现有部分中包含的行数(20)必须等于更新前的该部分中包含的行数(1),加上或减去从该部分插入或删除的行数(0插入,1删除)和加或减移入的行数或超出该部分(0移入,0移出)。'
我该如何解决?更改数据源有什么问题?
答案 0 :(得分:0)
在致电tableView.deleteRows(at: [indexPath], with: .middle)
之前,您需要从数据阵列中删除该对象。所以,你的代码应该是这样的:
// Editing of rows is enabled
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
//when delete is tapped
orders.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .middle)
}
}
答案 1 :(得分:0)
这是一个有趣的问题所以我决定尝试一下。
我做了一个快速的实现,我相信这不是最漂亮的方式,但如果你可以受到这样的启发:
class ViewController : UITableViewController {
var orders = [1,2,3,4]
var ABCDArray = ["A","B","C","D"]
var currentCellNumber = 0
override func viewDidLoad() {
super.viewDidLoad()
currentCellNumber = orders.count
tableView?.delegate = self
tableView?.dataSource = self
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
if orders.isEmpty {
cell.textLabel?.text = ABCDArray[indexPath.row]
} else {
cell.textLabel?.text = String(orders[indexPath.row])
}
return cell
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return currentCellNumber
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if !orders.isEmpty {
orders.remove(at: indexPath.row)
currentCellNumber -= 1
tableView.deleteRows(at: [indexPath], with: .middle)
if orders.isEmpty {
changeDataSource(newDataSourceArray: ABCDArray)
}
}
}
func changeDataSource(newDataSourceArray array: Array<Any>) {
var newCellIndexPaths = [IndexPath]()
for row in 0...array.count-1 {
print(row)
currentCellNumber = row+1
print(currentCellNumber)
let insertionIndexPath = IndexPath(row: row, section: 0)
print(insertionIndexPath)
newCellIndexPaths.append(insertionIndexPath)
}
tableView.insertRows(at: newCellIndexPaths, with: .automatic)
}
}
如果你有一些问题,甜甜圈犹豫&gt;希望它有所帮助