2010-01-29 39 views
0

我想让我的UIViewController出现在屏幕上,并在中央显示“Loading ...”UILabel,然后,一旦显示,就开始加载数据以显示。如何在加载后填充UIViewController?

我该如何做到这一点?我试图在viewDidAppear中加载它,但此时视图仍然没有显示在屏幕上,所以应用程序对用户没有反应。如果我尝试设置一个短计时器(0.0001秒),以便显示视图,然后在运行循环中调用数据加载方法,出于某种原因,打开视图控制器以查看内容所需的时间与没有计时器的时间是它的三倍。在这种情况下,出现Loading ...文本,但用户必须等待太长时间。

这样做的最好方法是什么?

回答

0

最好在viewDidLoad的线程中调用你的方法,在调用线程之前显示你的标签和当数据通过线程加载时隐藏标签。

你可以这样做。

-(void)viewDidLoad{ 
[self showLabel]; 
[NSThread detachNewThreadSelector:@selector(loadData:) toTarget:self withObject:nil]; 
} 

更新

- (void) loadData:(id)object{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    //Network Operations 
    //... 
    //... 
    //... 
    //... 
    [self performSelectorOnMainThread:@selector(reloadView:) withObject:arg waitUntilDone:[NSThread isMainThread]]; 
    [pool release]; 
} 

希望这有助于。 谢谢,

Madhup

+0

一定要放在单独的线程在一个自动释放池,或者您会得到内存泄漏 – nathanjosiah 2010-01-29 05:24:19

+0

可可不是线程安全的,所以这将只有当'loadData工作:'方法分流所有GUI操作到主线程上。 – Bill 2011-02-23 19:14:22

+0

@ Bill我认为这很明显。顺便更新答案。 – 2011-02-24 05:07:52

0

如果我没有误会你的目的,我认为你只是想播“加载”状态的用户,对不对?如果是这样,我建议你可以使用一个简单的ViewController来显示标签'Loading ...',然后创建MainViw或下一个视图,最后显示给用户,当它完成时,隐藏第一个视图显示在屏幕上的MainView ...