下载时进度条

时间:2012-03-22 10:39:16

标签: ios download nsdata

我有一个应用内下载的应用。我以这种方式成功下载了mp3文件:

NSData *data1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../somefile.mp3"]];
[data1 writeToFile:filePath atomically:YES];

但是这段代码执行时确实有很大的停顿。如何计算下载进度并使用进度条显示它?

2 个答案:

答案 0 :(得分:4)

问题是dataWithContentsOfURL:是阻止呼叫。这意味着它将阻止它正在运行的线程。

你有几个方法可以解决这个问题,而更好的选择可能是使用NSURLConnection

使用NSURLConnection,您可以异步执行下载请求,这将阻止它阻止主线程。

您必须使用NSURLConnectionDelegate方法了解下载进度,保存数据以及获知成功或失败。

请阅读NSURL Loading System的文档。

使用NSURLConnection的另一种方法是使用调度队列包含对GCD的一些调用来包装当前代码。这样可以阻止来电阻止您的用户界面,但不会让您确定进度 - 因此您仍然需要使用NSURLConnection

答案 1 :(得分:1)

您应该真正了解ASIHTTPRequest,尤其是this section

它提供回调来跟踪您的下载,异步和同步连接,队列,缓存和许多好东西。