崩溃:试图使同一索引路径的多个单元格出列,这是不允许的
Crash: Attempted to dequeue multiple cells for the same index path, which is not allowed
我有 tableview 数据源函数来从工厂方法函数构建单元格。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return OWTableViewOrganizer.instance.configureCell(at: indexPath)!
}
工厂方法在这里:
func configureCell(at indexPath: IndexPath) -> UITableViewCell? {
var cell = UITableViewCell()
switch indexPath.section {
case thisWorkoutSections.barbel.sectionNumber():
cell = barebellCell(indexPath: indexPath)
break
case thisWorkoutSections.lastWorkout.sectionNumber():
cell = lastWorkoutCell(indexPath: indexPath)
break
case thisWorkoutSections.personalRecord.sectionNumber():
cell = personalRecordCell(indexPath: indexPath)
break
case thisWorkoutSections.notes.sectionNumber():
break
default:
break
}
return cell
}
我有这个代码来构建单元格:
func lastWorkoutCell(indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier(), for: indexPath) as! WorkoutSetTableViewCell
if OWTableViewOrganizer.instance.lastWorkoutExerciseSets.count > 0 {
if indexPath.row < OWTableViewOrganizer.instance.lastWorkoutExerciseSets.count {
let logExerciseSet = OWTableViewOrganizer.instance.lastWorkoutExerciseSets[indexPath.row]
let setNumber = indexPath.row + 1
if let weight = logExerciseSet.weight?.doubleValue, let reps = logExerciseSet.reps?.intValue {
cell.setupCellWithData(setNumber: setNumber, weight: weight, reps: reps)
}
} else {
cell.setupCellWithData(setNumber: -1, weight: 0, reps: 0)
}
} else {
cell.setupCellWithData(setNumber: -1, weight: 0, reps: 0)
}
return cell
}
但这条线时常让我崩溃:
let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier(), for: indexPath) as! WorkoutSetTableViewCell
有错误:
Attempted to dequeue multiple cells for the same index path, which is not allowed. If you really need to dequeue more cells than the table view is requesting, use the -dequeueReusableCellWithIdentifier: method (without an index path)
我知道这里的代码风格和设计不太理想,有意见请跳过
我不知道去哪里找,我试过简单地删除 indexPath,但它看起来没有帮助或带来更多问题:
let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier()) as! WorkoutSetTableViewCell
我有一个控制器在它的顶部显示另一个控制器(就像在 Apple music 中一样),我可以向下滑动以显示底部控制器并向上滑动以恢复顶部控制器。我在日志中注意到我有一些演示警报,不确定是否需要处理以解决上述问题,但 JFY 信息。
好像有两个table查看触发器
tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
并且您只从 1 table 视图
中取出单元格
let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier(), for: indexPath) as! WorkoutSetTableViewCell
你应该尝试通过 tableView
从
tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
至
lastWorkoutCell(indexPath: IndexPath)
(将变为 lastWorkoutCell(indexPath: IndexPath, tableView: UITableView)
)并从 tableView
中取出单元格
我有 tableview 数据源函数来从工厂方法函数构建单元格。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return OWTableViewOrganizer.instance.configureCell(at: indexPath)!
}
工厂方法在这里:
func configureCell(at indexPath: IndexPath) -> UITableViewCell? {
var cell = UITableViewCell()
switch indexPath.section {
case thisWorkoutSections.barbel.sectionNumber():
cell = barebellCell(indexPath: indexPath)
break
case thisWorkoutSections.lastWorkout.sectionNumber():
cell = lastWorkoutCell(indexPath: indexPath)
break
case thisWorkoutSections.personalRecord.sectionNumber():
cell = personalRecordCell(indexPath: indexPath)
break
case thisWorkoutSections.notes.sectionNumber():
break
default:
break
}
return cell
}
我有这个代码来构建单元格:
func lastWorkoutCell(indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier(), for: indexPath) as! WorkoutSetTableViewCell
if OWTableViewOrganizer.instance.lastWorkoutExerciseSets.count > 0 {
if indexPath.row < OWTableViewOrganizer.instance.lastWorkoutExerciseSets.count {
let logExerciseSet = OWTableViewOrganizer.instance.lastWorkoutExerciseSets[indexPath.row]
let setNumber = indexPath.row + 1
if let weight = logExerciseSet.weight?.doubleValue, let reps = logExerciseSet.reps?.intValue {
cell.setupCellWithData(setNumber: setNumber, weight: weight, reps: reps)
}
} else {
cell.setupCellWithData(setNumber: -1, weight: 0, reps: 0)
}
} else {
cell.setupCellWithData(setNumber: -1, weight: 0, reps: 0)
}
return cell
}
但这条线时常让我崩溃:
let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier(), for: indexPath) as! WorkoutSetTableViewCell
有错误:
Attempted to dequeue multiple cells for the same index path, which is not allowed. If you really need to dequeue more cells than the table view is requesting, use the -dequeueReusableCellWithIdentifier: method (without an index path)
我知道这里的代码风格和设计不太理想,有意见请跳过
我不知道去哪里找,我试过简单地删除 indexPath,但它看起来没有帮助或带来更多问题:
let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier()) as! WorkoutSetTableViewCell
我有一个控制器在它的顶部显示另一个控制器(就像在 Apple music 中一样),我可以向下滑动以显示底部控制器并向上滑动以恢复顶部控制器。我在日志中注意到我有一些演示警报,不确定是否需要处理以解决上述问题,但 JFY 信息。
好像有两个table查看触发器
tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
并且您只从 1 table 视图
中取出单元格let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier(), for: indexPath) as! WorkoutSetTableViewCell
你应该尝试通过 tableView
从
tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
至
lastWorkoutCell(indexPath: IndexPath)
(将变为 lastWorkoutCell(indexPath: IndexPath, tableView: UITableView)
)并从 tableView