iOS Swift - TableView删除行错误

时间:2016-01-16 05:41:25

标签: ios uitableview

错误: '无效更新:第0节中的行数无效。更新(1)后现有部分中包含的行数必须等于更新前该部分中包含的行数(1),加上或减去从该部分插入或删除的行数(插入0,删除1),加上或减去移入或移出该部分的行数(0移入,0移出)。'

看了很多相关的帖子,我还是找不到答案。

以下是相关的代码段(不包含所有代码):

var todoItems : [Assignment] = []
var sections = Dictionary<String, Array<Assignment>>()
var sortedSections = [String]()

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == UITableViewCellEditingStyle.Delete {
        var tableSection = sections[sortedSections[indexPath.section]]
        tableSection!.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    }

}


override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return sortedSections[section]
}

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return sections.count
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return sections[sortedSections[section]]!.count
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您删除了数组中的元素,但错过了使用部分更新Dictionary:(

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == UITableViewCellEditingStyle.Delete {
        var tableSection = sections[sortedSections[indexPath.section]]
        tableSection!.removeAtIndex(indexPath.row)

        //add this line
        sections[sortedSections[indexPath.section]] = tableSection

        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
}

}