下载过程中的进度条

3

我有一个带有应用内下载功能的应用程序。我成功地通过以下方式下载MP3文件:

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

但是在执行这段代码的过程中,实际上存在着非常大的暂停时间。我该如何计算下载进度,并通过进度条来显示它?

1
请查看 https://github.com/jdg/MBProgressHUD 以展示进度。 - Tim Büthe
2个回答

4
问题在于dataWithContentsOfURL:是一个阻塞调用。这意味着它将阻塞正在运行的线程。
你有几个选项来解决这个问题,更好的选择可能是使用NSURLConnection
使用NSURLConnection,您可以异步执行下载请求,从而防止阻止主线程。
您必须使用NSURLConnectionDelegate方法来了解下载进度、保存数据以及了解成功或失败信息。
请阅读NSURL Loading System文档。
使用GCD使用分派队列包装当前代码的替代方法。这将防止调用阻止您的UI,但它不会允许您确定进度-为此,仍需要使用NSURLConnection

是的,我知道阻塞。谢谢你提到NSURLConnection =) - Eugene Trapeznikov

1

你应该真正关注ASIHTTPRequest,特别是this section

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


请注意页面顶部的警告:请注意,我不再维护这个库 - 您可能需要考虑为新项目使用其他工具。 :) - Tim Büthe
1
@TimBüthe 是的,我刚看到了!:P 但我仍然认为这是一个很棒的库,如果只关心其中一些类,那么自己维护它相对容易。但是,嘿,这只是我的个人观点 :) - Alladinian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接