iPhone UILabel没有更新

时间:2010-11-09 15:37:56

标签: iphone uiview uilabel

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

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

其中 - (void)updateProgress是我定义为调用[theLabel setNeedsDisplay]的函数。我NSLog了,就像

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

并且信息已正确更新,但标签实际上并未在视图中更新。此外,只有在加载所有内容后才会调用updateProgress。它会更新标签THEN,这几乎没用。有什么建议吗?

1 个答案:

答案 0 :(得分: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。然后你可以更新主线程上的标签。