我知道有很多类似的问题浮出水面,但没有一个答案似乎能解决我的问题。我有一个使用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,这几乎没用。有什么建议吗?
答案 0 :(得分:2)
NSURLConnection正在阻塞主线程(在视图完成之前,不会对视图执行任何更新。)
您可以在后台执行updateProgress
:
[self performSelectorInBackground:@selector(updateProgress) withObject:nil]
updateProgress
的第一行应该是:
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc]init];
最后一行应该是:
[pool release];
pool = nil;
当然,您也可以在后台执行NSURLConnection。然后你可以更新主线程上的标签。