下载时的进度条
我有一个应用程序下载的应用程序。我用这种方式成功下载了mp3文件:下载时的进度条
NSData *data1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../somefile.mp3"]];
[data1 writeToFile:filePath atomically:YES];
但是这段代码执行时确实有很大的停顿。我如何计算下载的进度并用进度条显示它?
问题是dataWithContentsOfURL:
是一个阻塞呼叫。这意味着它会阻塞正在运行的线程。
你有几个选择来解决这个问题,最好的可能是使用NSURLConnection
。
通过NSURLConnection
可以异步执行下载请求,这将防止它阻止主线程。
您必须使用NSURLConnectionDelegate
方法获知下载进度,保存其数据并获知成功或失败的通知。
请阅读NSURL Loading System的文档。
使用NSURLConnection
的替代方法是使用调度队列对GCD进行一些调用来包装当前代码。这将阻止呼叫阻止您的用户界面,但它不会让您确定进度 - 因为您仍然需要使用NSURLConnection
。
是的,我知道阻止。 NSURLConnection的Thnx =) – 2012-03-22 11:03:32
你真的应该看看的ASIHTTPRequest,尤其是this section
它提供的回调跟踪您的下载,异步和同步连接,队列,缓存和大量的好东西。
请注意页面顶部的警告:_请注意,我不再在这个库上工作 - 您可能要考虑为新项目使用其他内容。 :)_ – 2012-03-22 10:59:57
@TimBüthe是的,我刚看到它! :P 但我仍然认为这是一个很好的图书馆,如果只关心某些类,那么它自己就很容易维护它。但是,嘿,这是我的看法,我猜:) – Alladinian 2012-03-22 11:08:00
看看https://github.com/jdg/MBProgressHUD来显示进度。 – 2012-03-22 11:22:50