0

我有一个基于标签栏和从 Internet 检索的数据的应用程序。主选项卡显示地图,其他选项卡之一显示地图中心点周围的事件,使用UITableView. 如果用户移动地图然后移动到事件页面,我需要刷新表格中显示的事件列表。为此,我请求事件,viewWillAppear:animated:并在完成时(异步)调用表视图的reloadData方法。

除非用户在选项卡之间快速点击(例如显示事件、移动到地图、移动地图、移动回事件、移动回地图等),否则它的效果非常好。在某些时候,事件数据源 (an NSArray) 在表视图尝试访问它时被修改。

这里有一个类似的问题:
UITableView Crashes if Data Source Is Updated during Scrolling

该问题的一个解决方案描述了一个高层次的解决方案,这正是我想要的:在更新表时冻结数据源。然而,我不知道什么时候解冻数据源。问题是当表格完成更新时,我找不到任何通知方式。

有任何想法吗?如何在更新表时冻结数据源,然后在更新表后解冻它?

4

2 回答 2

1

虽然我真的很想在表视图完成访问数据源时收到通知,但我发现我的问题是由于从工作线程修改数据容器造成的。这个问题的答案使我找到了解决方案:

刷新 XML 数据并更新 UITableView

我现在要做的是在工作线程中填充一个单独的数组,然后在主线程上执行一个选择器,将更新的数据交换到表视图使用的数据容器中。

于 2010-11-19T03:56:26.580 回答
-1

问题是当表格完成更新时,我找不到任何通知方式。

tableView:cellForRowAtIndexPath:我认为您可以通过签入以查看是否已加载最后一行来假设数据已完成加载。

我没有测试过,只是根据API做一个假设

于 2010-11-19T03:34:48.893 回答