Swift TableView 多个自定义单元格,增加单元格中的行数导致崩溃

Swift TableView multiple Custom cells, inrease number of row in from cell lead to crash

我有几个小时试图解决的问题。

我有包含多个单元格的 tableView。 我不使用故事板。

我的问题是: tableView 中的单元格数量取决于数组的大小。当应用程序启动时,tableView 及其单元格会完美加载。即使当我插入 ViewDidLoad 时:

arrayOfCategory.append(Category(nameOfCategory: "Example", ColorOfCategory: .white))
tableView.reloadData()

有效。但是当我尝试将空隙插入按钮的目标时

@objc func handle(sender: UIButton)  {
    arrayOfCategory.append(Category(nameOfCategory: "Sdsdd", ColorOfCategory: .white))
    tableView.reloadData()
}

我的应用程序将因错误而崩溃:

TaskList[59513:1886772] Could not cast value of type 'TaskList.SwitchCell' (0x1073bd808) to 'TaskList.CategoryShowCell' (0x1073bd500).

这里是 cellForRow:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    switch indexPath.section {
    case 0:
        tableView.register(CategoryShowCell.self, forCellReuseIdentifier: categoryShowID)
        let cell = tableView.dequeueReusableCell(withIdentifier: categoryShowID, for: indexPath) as! CategoryShowCell
          cell.setCell(category: Category(nameOfCategory: "sdsd", ColorOfCategory: .white))
        return cell

    case 1:
        tableView.register(SwitchCell.self, forCellReuseIdentifier: swichCellID)
        let cell = tableView.dequeueReusableCell(withIdentifier: swichCellID, for: indexPath) as! SwitchCell
        return cell
    default:
        tableView.register(SwitchCell.self, forCellReuseIdentifier: swichCellID)
        let cell = tableView.dequeueReusableCell(withIdentifier: swichCellID, for: indexPath) as! SwitchCell

        return cell
    }

}

有谁知道问题出在哪里? Xcode 指向这一行:

let cell = tableView.dequeueReusableCell(withIdentifier: categoryShowID, for: indexPath) as! CategoryShowCell

在 cellForRow bude 上面一行中,我注册了正确的单元格。

您的问题出在不同类型的注册单元格中,并且您试图将其强制转换为不同的类型。就像 Xcode 说的那样 - TaskList.SwitchCellTaskList.CategoryShowCell。强制施法发生在 as! CategoryShowCell 这个地方。

我怀疑您正在为 categoryShowID 重新注册 SwitchCell.self。如果您的 categoryShowID 等于 swichCellID.

,就会发生这种情况

检查一下并记住,在 cellForRow 中多次注册一个单元格是个坏主意