我有一个问题,由于内存泄漏,在用于使用 RxDataSource 的 CollectionView 的 dataSource 函数中 [unowned self] 更改为 [weak self]。我现在收到了返回一个没有reuseIdentifier 的空白collectionViewCell 的崩溃。我知道我需要返回一个带有重用 ID 的单元格。
建议进行哪些更改以正确处理此问题?
有人建议在 viewDidLoad() 中设置 collectionView.dataSource = nil 可以解决这个问题......
我在想而不是在'guard'检查中返回CanvasItemCollectionViewCell(),我返回collectionView.dequeueReusableCell(for:indexPath,cellType:CanvasItemCollectionViewCell.self),但是如果self = self失败,这不意味着collectionView是垃圾吗?
这是一个难以调试的问题,因为这种崩溃不会始终如一地发生。
这里有一些截图来描绘我正在看的东西。
RxData源代码:
func dataSource()
-> RxCollectionViewSectionedAnimatedDataSource<CanvasSectionModel> {
RxCollectionViewSectionedAnimatedDataSource<CanvasSectionModel>(
animationConfiguration: AnimationConfiguration(
insertAnimation: .fade,
reloadAnimation: .fade,
deleteAnimation: .fade
),
configureCell: { [weak self] dataSource, collectionView, indexPath, _ in
guard let self = self else { return CanvasItemCollectionViewCell() }
switch dataSource[indexPath] {
case let .CellModel(model):
let cell = collectionView
.dequeueReusableCell(
for: indexPath,
cellType: CanvasItemCollectionViewCell.self
)
cell.model = model
cell.onDeleteHandler = { _ in
self.presentDeleteConfirmation { deleteConfirmed in
guard deleteConfirmed else { return }
self.viewModel.inputs.deletePage(withProofID: model.id)
}
}
return cell
}
}