Iphone 下载文件时立即更新ULabel

Iphone 下载文件时立即更新ULabel,iphone,objective-c,cocoa-touch,uilabel,performselector,Iphone,Objective C,Cocoa Touch,Uilabel,Performselector,我正在使用NSURLConnection下载文件。我的视图中有一个UILabel,它必须显示当前正在下载的文件。UILabel在开始和结束时都在更新。假设我正在下载10个文件。我能够在开始下载之前和完成下载之后设置标签文本 我可以理解,我试图调用的方法没有在主线程中运行 因此,我使用了以下代码使其在主线程中运行 [_myHome performSelectorOnMainThread:@selector(updateLabel) withObject:nil waitUntilDone:YES]

我正在使用NSURLConnection下载文件。我的视图中有一个UILabel,它必须显示当前正在下载的文件。UILabel在开始和结束时都在更新。假设我正在下载10个文件。我能够在开始下载之前和完成下载之后设置标签文本

我可以理解,我试图调用的方法没有在主线程中运行

因此,我使用了以下代码使其在主线程中运行

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

- (void) updateLabel
 {
         _fileName.text =[NSString stringWithFormat:@"%@",fileName];
 }
这似乎也不起作用。我做错什么了吗


有人能告诉我如何立即更新标签吗?

解决:我使用NSNotificationCenter向其他类发送通知,这些类将立即更新标签。我尝试使用performSelectorOnMainThread,即使updateProgress和performSelectorOnMainThread都在同一个类中

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

如果有任何原因说明它没有成功,我们都欢迎

看起来没问题-waituntildone可以是否,如果不是,为什么不只是_filename.text=filename。当这样的事情不起作用时,第一步应该是使用NSLog()/断点来检查实际调用的方法。你做到了吗?是的。我用过NSLog。我的问题中没有提到这些台词。实际上,updateLabel方法正在被调用。但是标签没有更新。关于
文件名
如何检查
文件名
是否不是空字符串。\u文件名不是零?并指向正确的标签?99%的时间像这样的事情都是由于小疏忽造成的。另外,请注意,您可以使用dispatch_async(dispatch_get_main_queue(),^{{u fileName.text=fileName});为了避免有额外的方法调用。这是
\u文件名吗
是你的IBOutlet吗?哎呀。那是在不同的班级。无论如何,即使我尝试在这个委托方法中更新我的标签,它也不会起作用。因为didReceiveData仍在主线程中运行。您只能通过上面指定的方法控制下载进度。如果该方法在另一个类中,请实现该类的委托,以便didReceiveData:将消息发送到当前类,然后在那里尝试更新主线程上的标签。下载文件工作正常。仅供参考,我们不应该调用didReceiveData中的方法,因为这些方法将继续接收数据。我们应该在ConnectiondFinishLoading时调用这些方法。我还尝试在NSURLConnection的委托方法中更新UILabel。如果您需要逐段监控下载,请使用我指定的方法。如果由于线程问题而无法更新标签,请在didFinishLoading中使用waitUntilDone(Y/N)。