正在获取行数据时,表视图中显示活动指示器

时间:2010-04-16 04:05:26

标签: uiactivityindicatorview viewdidappear

我从tableview1.row导航到tableview2,其中有很多行被提取。假设加载时间大约为3秒,我希望一旦选择了tableview1.row,导航就会滑入tableview2,然后在获取数据的同时在其基础表视图中呈现数据,然后在tableview2上显示UIActivityIndi​​catorView。注意,tableview2实际上是父UIView的子视图(而不是父UIVableView)。

我看过这篇文章:Activity indicator should be displayed when navigating from UITableView1 to UITableView2

...它提供了添加活动指示器start和stopAnimating调用数据提取调用到tableview2的viewDidLoad的说明。

事情是,我不确定上面的解决方案如何工作,因为viewDidLoad运行并在tableview2可见地滑入视图之前完成。

另外,我还尝试在IB中的tableview2上添加一个活动指示器,并将IBOutlet指示器的开始/停止动画代码添加到viewDidAppear中。发生的事情是数据获取运行,我可以看到指示器旋转,但在获取结束时,表视图为空。看起来像viewDidAppear为时已晚,无法将数据添加到表视图中,因为已经触发了cellForRowAtIndexPath等。

任何人都可以建议任何指针吗?我很可能会错过这里明显的东西(我早上5点左右,认为我的大脑很难糊涂)。我应该从viewDidAppear重新触发cellForRowAtIndexPath等吗?问题是我的表视图是子视图而不是父视图吗?

由于

1 个答案:

答案 0 :(得分:1)

我再看看自己的问题,答案实际上很简单。通常不应在主线程上运行任何非常密集的处理。我试图在同一个线程上对活动指示器进行数据密集型获取和UI显示,因此这些按顺序依次处理。

解决方案是进入我的新视图控制器,a)启动主线程上的活动指示器动画,然后b)在另一个线程上运行数据密集型提取(使用performSelectorInBackground)。无法从后台线程应用任何与UI相关的更新。这些应该交还给主线程。

已经有大量SO帖子(例如here),我不好意思从一开始就不接受这些帖子:)