使用reloadRowsAtIndexPaths的工作流程:withRowAnimation

时间:2011-02-26 01:33:57

标签: iphone uitableview ios4

我正在尝试动态更新UITableView中的单元格。事件由后台线程接收的数据触发,因此一切都是异步的,并且无法预测事件的顺序。

在这种情况下,我不确定工作流程应该是什么。调用reloadRowsAtIndexPaths:withRowAnimation时,如何确保行计数和索引路径正确?之前对deleteRowsAtIndexPaths:withRowAnimation的调用仍然可以进行动画制作。

如果所有更改同时发生,我可以使用beginUpdatesendUpdates,但在上述情况下我该怎么办?

2 个答案:

答案 0 :(得分:1)

Hanno,我建议使用命令对象模型对主线程上的更改进行排队。

以下是:

  • 在主线程的回调中,将add或delete作为对象附加到队列(可变数组)。
  • 遍历队列以添加和删除主线程上的对象,每个操作都是原子的(即首先获取表状态,不中断处理它,删除队列的头部)
  • 如果队列中有更多命令,或者等待动画结束,则决定是否要中断动画,然后处理下一个排队对象。

计时器和animationDidFinish回调的混合应该这样做。

答案 1 :(得分:0)

因为你必须在主线程中进行所有表更新(因为必须在主线程上调用UIKit),所以我在这里看不到并发问题。每当您收到新数据时,请在更新表的主线程上调用方法。此方法将阻止主线程,直到它完成。这应该确保表视图保持其完整性。

或者您是否担心重叠行动画?