我正在使用一个UIViewController
和一个UITableView
连接到另一个打算从中添加条目的UIViewController
。它们通过轻松的链接链接在一起,但是每当我尝试实际添加条目时,都会得到以下信息:
尝试将第0行插入第0节,但其中只有0行
更新后的第0节
这就是我所拥有的:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
switch(segue.identifier ?? "") {
case "AddItem":
os_log("Adding a new item.", log: OSLog.default, type: .debug)
case "ShowDetail":
guard let DetailViewController = segue.destination as? ViewController else {
fatalError("Unexpected destination: \(segue.destination)")
}
guard let selectedCell = sender as? TableViewCell else {
fatalError("Unexpected sender: \(sender)")
}
guard let indexPath = tableView.indexPath(for: selectedCell) else {
fatalError("The selected cell is not being displayed by the table")
}
let selectedItem = items[indexPath.row]
DetailViewController.item = selectedItem
default:
fatalError("Unexpected Segue Identifier; \(segue.identifier)")
}
}
和
@IBAction func unwindToList(sender: UIStoryboardSegue) {
if let sourceViewController = sender.source as? ViewController, let item = sourceViewController.item {
if let selectedIndexPath = tableView.indexPathForSelectedRow {
items[selectedIndexPath.row] = item
self.tableView.reloadRows(at: [selectedIndexPath], with: .none)
}
else {
items.append(item)
self.tableView.beginUpdates()
self.tableView.insertRows(at: [IndexPath(row: items.count - 1, section: 0)], with: .automatic)
self.tableView.endUpdates()
}
}
}
和
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
和
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "TableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? TableViewCell else {
fatalError("The dequeued cell is not an instance of TableViewCell")
}
let item = items[indexPath.row]
cell.labelName.text = item.name
return cell
}
如何解决?
并且请原谅,我对Swift还是很陌生。 :)
最佳答案
如果要使用insertRowsAtIndexPaths:withRowAnimation:
,则需要在更新数据数组之后在beginUpdates
和endUpdates
块内进行操作。根据Documentation:
要在表视图中插入和删除一组行和节,请首先准备一个或多个数组,这些数组是节和行的数据源。在删除并插入行和节之后,将从此数据存储中填充结果行和节。
您可以通过在调用insertRowsAtIndexPaths:withRowAnimation:
之前更改数组来正确地进行操作,但是您需要使用批更新而不是reloadData
。
您可以在“文档”链接上找到完整的示例。
关于ios - 尝试插入行时,“尝试将第0行插入第0节,但更新后第0节只有0行”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47010202/