【发布时间】:2016-11-30 13:40:08
【问题描述】:
在我的UICollectionView 中,我使用一个简单的自定义对象数组来生成和显示单元格。有时数据会发生变化,我想一次性为这些变化设置动画。我选择通过跟踪第二个数组中的所有更改,区分两者,并在performBatchUpdates 块内生成一组移动、插入、删除和更新操作来做到这一点。我现在意识到在同一个块中执行所有这些操作非常棘手,因为您必须担心索引操作的顺序。事实上,this issue 的公认答案是错误的(但在 cmets 中已更正)。
文档似乎很缺乏,但它涵盖了一种情况:
在批处理操作中,在插入之前处理删除。这意味着 删除的索引是相对于 批处理操作之前集合视图的状态,以及 插入的索引相对于 批处理操作中所有删除后的状态。
但是,文档没有说明何时处理移动。如果我在同一个performBatchUpdates 中调用moveItemAtIndexPath 和deleteItemsAtIndexPaths,移动索引应该相对于删除前还是删除后的顺序? insertItemsAtIndexPaths呢?
最后,我在同一操作中调用reloadItemsAtIndexPaths 和moveItemAtIndexPath 时遇到问题:
致命异常:NSInternalInconsistencyException 尝试删除 并重新加载相同的索引路径
有没有办法在同一个performBatchUpdates 中完成我想要的所有操作?如果是这样,更新相对于其他更新的处理顺序是什么?如果没有,人们通常会做什么?完成所有其他操作后重新加载数据?前?如果所有动画都发生在一个阶段,我会更喜欢。
【问题讨论】:
标签: ios objective-c swift uicollectionview uikit