EditingStyle - 删除数组中的单元格和项目

Posted

技术标签:

【中文标题】EditingStyle - 删除数组中的单元格和项目【英文标题】:EditingStyle - Remove cell and item in an array 【发布时间】:2015-09-21 23:32:27 【问题描述】:

我已经创建了一个数组

var subjectsData = [ Subject(name: "Investments", semester: 1), Subject(name: "Statistics", semester: 1), Subject(name: "Studium Universale", semester: 2) ]

还有一个tableView

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("SubjectCell", forIndexPath: indexPath) as! SubjectCell

    let subject = subjects[indexPath.row] as Subject
    let Semester = "\(subject.semester)"

    cell.nameLabel.text = subject.name

    cell.semesterLabel.text = "Semester"

    cell.semesterNumberLabel.text = Semester

    return cell

var subjects: [Subject] = subjectsData

我现在尝试创建一个编辑函数来删除单元格/行,从而也删除数组中的相应项目。

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
    if editingStyle == UITableViewCellEditingStyle.Delete 
        subjectsData.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    

在我看来,代码看起来合乎逻辑且功能正常,但在运行应用程序时,每当我尝试删除行/单元格并收到错误消息时就会崩溃:

'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (3) must be equal to the number of rows contained in that section before the update (3), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'

每当我删除一行/单元格时,数组中的相应项也应该被删除,但如果我正确理解错误,数组似乎没有更新/删除该项?

如果有人知道为什么会发生此错误以及如何解决它,我将不胜感激。

【问题讨论】:

【参考方案1】:

好的,所以我把subjectsData.removeAtIndex(indexPath.row)改成了这个editingStyle代码

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
    if editingStyle == UITableViewCellEditingStyle.Delete 
        subjects.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    

因为我说var subjects: [Subject] = subjectsData

我不知道为什么这会解决该错误,但现在当我尝试删除某些内容时,应用程序不再崩溃。

【讨论】:

以上是关于EditingStyle - 删除数组中的单元格和项目的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 中的单元格和数组的连接和索引有何不同?

删除表格单元格和行之间的间距

tableview commit editingStyle 正在删除错误的条目

UITableViewCell EditingStyle Delete 无法正常工作

从 UICollectionViewCell 中删除单元格和相应的图像?

可重复使用的单元格和数组的问题