2010-11-09 86 views
0

我知道存在很多类似的问题,但没有一个答案似乎解决了我的问题。我有一个应用程序使用NSURLConnection来下载文件,然后对下载的文件进行一些计算。我设置了一个UILabel来显示当前的加载状态(例如:“加载文件”,“解析文件”)。我更新NSURLConnection委托的didReceiveResponse和connectionDidFinishLoading函数中的UILabel,以及我的代码中的一些其他地方。我通过调用下面的函数对其进行更新:iPhone UILabel没有更新

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

其中 - (无效)的UpdateProgress是我定义调用[theLabel setNeedsDisplay]的函数。我NSLog'd它,就像

NSLog(@"theLabel: %@\n",theLabel.text); 

和信息更新正确,但标签实际上并没有在视图中更新。此外,updateProgress仅在加载完所有内容后调用。它更新标签THEN,这是没有用的。有什么建议么?

回答

2

NSURLConnection正在阻塞主线程(在视图上将不会执行任何更新,直到它完成)。

您可以在后台执行updateProgress

[self performSelectorInBackground:@selector(updateProgress) withObject:nil] 

updateProgress第一行应该是:

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc]init]; 

最后几行应该是:

[pool release]; 
pool = nil; 

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html

当然,你也可以在后台执行NSURLConnection。然后你可以更新主线程上的标签。

+0

谢谢,现在工作完美! – Mike 2010-11-09 15:56:08