【问题标题】:My data source is being changed out from under a UITableView我的数据源正在从 UITableView 下更改
【发布时间】:2010-11-19 03:03:28
【问题描述】:

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

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

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

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

有什么想法吗?如何在表格更新时冻结数据源,然后在表格更新完成后解除冻结?

【问题讨论】:

    标签: iphone cocoa-touch uitableview viewwillappear


    【解决方案1】:

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

    Refreshing XML data and updating a UITableView

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

    【讨论】:

      【解决方案2】:

      问题是我找不到任何方法 餐桌完成时收到通知 正在更新中。

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

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

      【讨论】:

      • 嗯,问题是tableView:cellForRowAtIndexPath: 被分别为每一行调用,并且只为可见的行调用。结果,你不知道什么时候调用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多