2012-02-19 54 views
3

我需要一个建议当我的视图控制器加载很长时,该怎么做?最佳实践:视图控制器加载时间很长时该怎么办?

在我的情况下,我有一个使用route-me制作的离线地图,它需要几秒钟从大约100mb数据库加载地图,然后加载大量标记,将它们放在地图上等。 如果我运行viewDidLoad UI中的这段代码似乎没有响应,因为在按下标签页或按钮后,在加载所有内容时,没有任何事情发生。如果我把它放在viewDidAppear映射中,直到我退出这个视图控制器并返回它,它总是不会显示出来。

回答

5

如果需要很长时间,你应该表现出微调或其他“占用”指示符,而你加载在后台线程您的数据。

一旦您的时间密集型过程完成,请将UI更新回主线程并隐藏您的微调器/繁忙指示器。

在后台线程上执行代码是非常容易的 - 有几种方法可以做到这一点 - 但最简单/最直接的方法可能是用performSelectorInBackground:withObject:如下例:

[self performSelectorInBackground:@selector(loadMap) withObject:nil]; 

当你”重新准备主线程上再次运行 - 这是同样的事情,但在反向使用performSelectorOnMainThread:withObject:waitUntilDone:

[self performSelectorOnMainThread:@selector(wrapupLoadMap) withObject:nil waitUntilDone:NO]; 

好运。