跨部分重新排序行时更新无效
Posted
技术标签:
【中文标题】跨部分重新排序行时更新无效【英文标题】:Invalid Update when re-ordering rows across sections 【发布时间】:2016-10-16 18:00:16 【问题描述】:在跨部分重新排序一些 UITableViewCells
时,我正在尝试更新我的模型,但出现错误:
无效更新:第 0 节中的行数无效。 更新 (10) 后包含在现有节中的行必须是 等于该节之前包含的行数 update (10),加上或减去插入或删除的行数 该部分(0 插入,0 删除)和加或减的数量 移入或移出该部分的行(0 移入,1 移出)。
我有以下代码,我认为我在其中正确删除和插入行? (但显然不是;-))
// Update the data model according to edit actions delete or insert.
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
let fromIndexPath = NSIndexPath(forRow: indexPath.row, inSection: indexPath.section)
if editingStyle == UITableViewCellEditingStyle.Delete
playingList.removeAtIndex(fromIndexPath.row);
// Process the row move. This means updating the data model to correct the item indices.
func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath)
let moveFrom = NSIndexPath(forRow: sourceIndexPath.row, inSection: sourceIndexPath.section)
let moveTo = NSIndexPath(forRow: destinationIndexPath.row, inSection: destinationIndexPath.section)
// swap the data between the 2 arrays
let dataPiece = playingList[moveFrom.section][moveFrom.row]
playingList[moveTo.section].insert(dataPiece, atIndex: moveTo.row)
playingList[moveFrom.section].removeAtIndex(moveFrom.row)
// Do the move between the table view rows
playerTableView.moveRowAtIndexPath(moveFrom, toIndexPath: moveTo)
【问题讨论】:
【参考方案1】:你的问题是你打电话给moveRowAtIndexPath
。只需更新您的数据模型即可。
func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath)
let moveFrom = NSIndexPath(forRow: sourceIndexPath.row, inSection: sourceIndexPath.section)
let moveTo = NSIndexPath(forRow: destinationIndexPath.row, inSection: destinationIndexPath.section)
// swap the data between the 2 arrays
let dataPiece = playingList[moveFrom.section][moveFrom.row]
playingList[moveTo.section].insert(dataPiece, atIndex: moveTo.row)
playingList[moveFrom.section].removeAtIndex(moveFrom.row)
顺便说一句 - 您的 commitEditStyle
方法也不正确。它正在删除整个部分的数据(但使用行而不是部分)。只需删除一行:
playingList[indexPath.section].removeAtIndex(indexPath.row)
【讨论】:
谢谢你,如果我能加倍投票给你,我会的! :-) 赞成和接受就像双重赞成票。很高兴为您提供帮助。以上是关于跨部分重新排序行时更新无效的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 负顶部内容插入导致重新排序行时出现故障