由于未捕获的异常而终止应用程序,原因是:'尝试从更新之前仅包含0行的第1部分删除第3行'

时间:2017-09-30 20:30:54

标签: ios swift tableview height

我正在尝试重新加载我的TableView但是我得到了这个异常“由于未捕获的异常'终止应用程序'NSInternalInconsistencyException',原因:'尝试删除第1部分中的第3行,在更新之前只包含0行'”。

以下是我的代码: -

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if statusTableView == tableView {

        return ModelAssessStatus.sharedInstance.arrType.count
    } 

    else {
         if !sections[section].expanded {
            return 0
        }

         else {
            return sections[section].names.count
        }

        //return sections[section].names.count
        /*if sections[section].expanded == true {
            return sections[section].names.count
        }

        else {
            return 0
        }*/
    }
}. 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var expandableCategoryCell = tableView.dequeueReusableCell(withIdentifier: "ExpandableCategoryCell") as? ExpandableCategoryCell

        if expandableCategoryCell == nil {
            var nib:Array = Bundle.main.loadNibNamed("ExpandableCategoryCell", owner: self, options: nil)!
            expandableCategoryCell = nib[0] as? ExpandableCategoryCell
        }

        expandableCategoryCell?.selectionStyle = .none
        expandableCategoryCell?.labelName.text = sections[indexPath.section].names[indexPath.row]
        return expandableCategoryCell!

        //return UITableViewCell()

    }. 

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

    if tableView == self.expandableTableView {
        return 60
    }

    return 0
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {

    if tableView == self.expandableTableView {
        return 0
    }

    return 0
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    if tableView == expandableTableView {

        let cell = self.expandableTableView.dequeueReusableHeaderFooterView(withIdentifier: "ExpandableHeaderView")
        let header = cell as! ExpandableHeaderView

        header.customInit(title: sections[section].categoryType, section: section, delegate: self, isSelected: sections[section].fullSelected)

        if sections[section].expanded {
            header.imgArrow?.image = UIImage(named : "down_Arow")//.transform = (header.imgArrow?.transform.rotated(by: CGFloat(Double.pi)))!
        }

        else {
            header.imgArrow?.image = UIImage(named : "error")
        }

        return cell
    }

    else {
        return UIView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
    }
}

//Height For Raw at indexPath
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    if statusTableView == tableView {
        return 50
    }

    else {

        if (sections[indexPath.section].expanded) {
            return 60
        }

        else {
            return 0
        }
    }
  }
}


extension PeerCategoryStatusVC : expandableHeaderViewDelegate {
func toggleSections(header: ExpandableHeaderView, section: Int) {

    sections[section].expanded = !sections[section].expanded

    //expandableTableView.reloadData()
    expandableTableView.beginUpdates()

    for index in 0..<sections[section].names.count {
        expandableTableView.reloadRows(at: [IndexPath(row : index, section : section)], with: .automatic)
    }

    expandableTableView.endUpdates()

    //self.view.layoutIfNeeded()
  }
}. 

这里开始更新和结束更新TableView。 我试图重新加载tableView但不知道为什么我得到异常。

如果我保持相同数量的行,则会出现约束问题。

我有什么需要补充的吗?

1 个答案:

答案 0 :(得分:0)

我只是解决了相同的异常。这主要是因为您使用索引路径reloadRows(at: with:)大于总行数来调用row