Skip to content

Section removals cause wrong calls to CollectionCellElement's didDisappear #16

Open
@JosephDuffy

Description

@JosephDuffy

Describe the bug

When a section is deleted the didDisappear call on CollectionElementsProvider is either not made or is made on the wrong CollectionElementsProvider.

To Reproduce

Delete a section.

Expected behavior

Correct calls to didDisappear should be made/should not crash.

Environment

  • OS Version: Any iOS
  • Library Version: 1.05
  • Device: Any

Additional context

CollectionCoordinator.collectionView(_:didEndDisplaying:forItemAt:) uses the state of the hierarchy after the more recent updates have been applied, meaning the removed cell/section is no longer in the SectionProviderMapping or the local cachedProviders.

For example deleting section 1 with a hierarchy of:

  • section 0
    • 0-0
    • 0-1
    • 0-2
  • section 1
    • 1-0
    • 1-1
  • section 2

Then remove section 1:

  • Crashes when the cell is cast to the wrong type
    • This happens when section 1 and have different cell types
  • Calls the wrong CollectionElementsProvider
    • This happens when section 1 and have the same cell types
    • This would call didDisappear on section 2 (even though no cells were removed and it's already empty)

Or when section 2 is removed:

  • Makes no call at all
    • This happens because of guard indexPath.section < sectionProvider.numberOfSections else { return }

I don't have time to look at this right now and I'm not as familiar with the SectionProviderMapping as other parts, can you try and fix this @shaps80?

A suggested solution is to cache the cells and their sections (e.g. cellSectionMap: [UICollectionViewCell: Section]) but I'd like to know if there's a alternative approach since that might lead to more issues down the line?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions