在我看来UICollectionView,我使用一个简单的自定义对象数组来生成和显示单元格.偶尔数据会发生变化,我想一次性对变化进行动画处理.我选择通过跟踪第二个数组中的所有更改,区分这两个更改,并在performBatchUpdates块内部生成一组移动,插入,删除和更新操作来完成此操作.我现在意识到在同一个块中执行所有这些操作非常棘手,因为您不得不担心索引操作的顺序.事实上,这个问题的公认答案是错误的(但在评论中已经纠正).
文档似乎很缺乏,但它涵盖了一个案例:
在批处理操作中插入之前处理删除.这意味着删除的索引相对于批处理操作之前的集合视图的状态的索引进行处理,并且在批处理操作中的所有删除之后,相对于状态的索引处理插入的索引.
但是,该文档没有讨论何时处理移动.如果我打电话moveItemAtIndexPath并且deleteItemsAtIndexPaths相同performBatchUpdates,移动索引是否应该相对于删除前或删除后的订单?怎么样insertItemsAtIndexPaths?
最后,我面临着调用reloadItemsAtIndexPaths和moveItemAtIndexPath同一操作的问题:
致命异常:NSInternalInconsistencyException尝试删除并重新加载相同的索引路径
有没有办法在同一个地方做我想要的所有操作performBatchUpdates?如果是,那么更新相对于其他更新的处理顺序是什么?如果没有,人们通常会做什么?在完成所有其他操作后重新加载数据?之前?如果所有的动画都发生在一个阶段,我更喜欢.
链接performBatchUpdate调用的正确方法是什么UICollectionView,以便在下一个更新开始之前完成一次更新,以防止同时触发多次,从而导致 IndexPaths 不同步(由于删除与插入混合)