微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

崩溃:尝试使同一索引路径的多个单元出队,这是不允许的

如何解决崩溃:尝试使同一索引路径的多个单元出队,这是不允许的

我有tableview数据源func可以从工厂方法函数构建单元格。

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,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音乐一样),我可以向下滑动以显示底部控制器,而向上滑动以返回顶部控制器。我在日志中注意到我有一些演示警报,不确定是否需要解决上述问题,但不确定JFY信息。

解决方法

似乎有两个表视图触发器

tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath)

您只能从1个表视图中的单元格出队

let cell = tableView.dequeueReusableCell(withIdentifier: WorkoutSetTableViewCell.cellIdentifier(),for: indexPath) as! WorkoutSetTableViewCell

您应该尝试从{p>中传递tableView

tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath)

lastWorkoutCell(indexPath: IndexPath)

(将变为lastWorkoutCell(indexPath: IndexPath,tableView: UITableView))并从tableView出队单元格

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。