我有一个聊天collectionView。用户可以在其中发送新消息,删除消息等。collectionView由fetchedResultController支持。
有多种类型的单元,例如文本,图像,音频等。我创建了一个播放器,用于处理单个单元的音频。该单元是播放器的代表,因此我可以从播放器对象中更新播放时间,停止播放器等。我使用indexPath跟踪当前的音频播放单元。
但是问题是,如果用户删除在音频消息之前接收或发送的消息,则音频消息的indexPath会更改。
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>,
didChange anObject: Any,
at indexPath: IndexPath?,
for type: NSFetchedResultsChangeType,
newIndexPath: IndexPath?) {
}
在此回叫中,我仅收到已删除单元格的删除。但是我没有收到其他单元格的已更新indexPath的任何回调。如果删除了上一个单元,如何跟踪音频单元的indexPath或该单元?
答案 0 :(得分:0)
我怀疑如果您填充到每个单元格中的数据的结构或类具有唯一的标识符,这样您就可以对每个对象进行操作,而不管其在屏幕上的位置如何,这可能会很好。如果您的索引要四处移动并进行更改,则可能需要更永久的内容来跟踪要对哪些对象进行操作。
希望这是有道理的。如果“需要”对每个单元格的索引而不是其中的数据进行操作,则只要有任何移动,删除或更改,就需要更新对索引的任何引用。