如何跟踪 collectionView(由 FetchedResultsController 支持)单元格

Posted

技术标签:

【中文标题】如何跟踪 collectionView(由 FetchedResultsController 支持)单元格【英文标题】:How to track collectionView (backed by FetchedResultsController) cell 【发布时间】:2018-11-01 18:06:59 【问题描述】:

我有一个聊天 collectionView。用户可以在其中发送新消息、删除消息等。collectionView 由 fetchedResultController 支持。

有多种类型的单元格,例如文本、图像、音频等。我创建了一个播放器来处理单个单元格的音频。单元格是播放器的代表,因此我可以从 Player 对象更新播放时间、停止播放器等。我使用 indexPath 跟踪当前的音频播放单元。

但问题是,如果用户删除了在音频消息之前接收或发送的消息,则音频消息的 indexPath 会发生变化。

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>,
                    didChange anObject: Any,
                    at indexPath: IndexPath?,
                    for type: NSFetchedResultsChangeType,
                    newIndexPath: IndexPath?) 

在这个回调中,我只收到删除单元格的删除。但是我没有收到其他单元格的更新 indexPath 的任何回调。如果前一个单元格被删除,如何跟踪音频单元格 indexPath 或单元格?

【问题讨论】:

【参考方案1】:

我怀疑,如果您填充到每个单元格中的数据的结构或类具有唯一标识符,这样您就可以对每个对象进行操作,而不管它在屏幕上的位置如何。如果您的索引要四处移动和更改,您可能需要更永久的东西来跟踪要对哪些对象采取行动。

希望这是有道理的。如果您“需要”对每个单元格的索引而不是其中的数据进行操作,则需要在任何移动、删除或更改时更新对索引的任何引用。

【讨论】:

但我需要更新单元格。例如,当播放音频时,我需要根据持续时间移动滑块。 更新索引是个好主意。这意味着我必须同时跟踪 uuid 和索引。 我想避免检查完整的 fetchedresultcontroller 来查找更新的索引。

以上是关于如何跟踪 collectionView(由 FetchedResultsController 支持)单元格的主要内容,如果未能解决你的问题,请参考以下文章

全自动荧光免疫分析仪系统是如何在FET4418-C核心板中实现的

场效应管

稳压电源元件使用功率FET应注意的问题

基于FET3568-C核心板实现的智能网关

Collectionview固定单元格间距

删除后重新加载collectionView