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.SwitchCell
到 TaskList.CategoryShowCell
。强制施法发生在 as! CategoryShowCell
这个地方。
我怀疑您正在为 categoryShowID
重新注册 SwitchCell.self
。如果您的 categoryShowID
等于 swichCellID
.
,就会发生这种情况
检查一下并记住,在 cellForRow
中多次注册一个单元格是个坏主意
我有几个小时试图解决的问题。
我有包含多个单元格的 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.SwitchCell
到 TaskList.CategoryShowCell
。强制施法发生在 as! CategoryShowCell
这个地方。
我怀疑您正在为 categoryShowID
重新注册 SwitchCell.self
。如果您的 categoryShowID
等于 swichCellID
.
检查一下并记住,在 cellForRow
中多次注册一个单元格是个坏主意