如何跟踪 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 支持)单元格的主要内容,如果未能解决你的问题,请参考以下文章