2012-07-10 83 views
0

我正在使用NSURLConnection来下载文件。我在我的视图中有一个UILabel,它必须显示当前正在下载的文件。 UILabel在开始和结束时得到更新。可以说我下载了10个文件。我可以在开始下载之前和完成下载之后设置标签文本。下载文件时立即更新ULabel

我可以理解,而我试图打电话是不是在主线程中运行的方法,

所以我用下面的代码,使其在主线程中运行,

[_myHome performSelectorOnMainThread:@selector(updateLabel) withObject:nil waitUntilDone:YES]; 

和方法是

- (void) updateLabel 
{ 
     _fileName.text =[NSString stringWithFormat:@"%@",fileName]; 
} 

这似乎也不起作用。我在这里做错了什么?

谁能告诉我如何更新标签马上?

+0

看起来没问题 - waituntildone可以是NO,如果不是_filename.text = fileName。当这样的事情不起作用时,第一步应该是使用NSLog()/ breakpoints来检查实际调用的方法。你做到了吗? – ChrisH 2012-07-10 10:33:39

+0

是的。我用过NSLog。我的问题中没有这些线。实际上updateLabel方法正在被调用。但标签没有更新。 – Perseus 2012-07-10 10:35:58

+0

'fileName'检查'fileName'是否不是空字符串。 – 2012-07-10 10:39:23

回答

0

解决:我用NSNotificationCenter发送通知给其他类,它会立即更新标签。我试着用performSelectorOnMainThread,即使updateProgress,performSelectorOnMainThread都在同一个类中。

为什么它没有解决的任何原因,是最受欢迎的。

-1
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    //update your label 
} 
+0

糟糕。这是不同的课程。无论如何,即使我尝试在此代理方法中更新我的标签,它也不起作用。因为didReceiveData仍然在主线程中运行。 – Perseus 2012-07-10 10:41:06

+0

只能用上面指定的方法控制下载的进度。如果该方法在另一个类中,请实现该类的委托,以便didReceiveData:将消息发送到当前类,然后尝试更新主线程上的标签。 – 2012-07-10 10:47:43

+0

下载文件工作正常。而FYI,我们不应该调用didReceiveData中的方法,它将继续接收数据。我们应该在connectionDidFinishLoading时调用方法。而且我正在尝试在NSURLConnection的委托方法中更新UILabel。 – Perseus 2012-07-10 10:51:12