Ios 下载时的进度条

Ios 下载时的进度条,ios,download,nsdata,Ios,Download,Nsdata,我有一个应用程序正在下载。我通过以下方式成功下载mp3文件: NSData *data1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../somefile.mp3"]]; [data1 writeToFile:filePath atomically:YES]; 但是在执行这段代码时,会有很大的停顿。我如何计算下载进度并用进度条显示它呢?你真的应该看看 它提供了用于跟踪下载、异步和同步连接、队列、缓存和许多好东西

我有一个应用程序正在下载。我通过以下方式成功下载mp3文件:

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

但是在执行这段代码时,会有很大的停顿。我如何计算下载进度并用进度条显示它呢?

你真的应该看看


它提供了用于跟踪下载、异步和同步连接、队列、缓存和许多好东西的回调。

问题在于
dataWithContentsOfURL:
是一个阻塞调用。这意味着它将阻止正在其上运行的线程

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

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

您必须使用
nsurlconnectionelegate
方法通知下载进度、保存数据以及成功或失败

请阅读文档以获取更多信息


使用
NSURLConnection
的另一种方法是使用调度队列将当前代码包装为对GCD的一些调用。这将阻止调用阻止您的UI,但它将不允许您确定进度,因为您仍然需要使用<代码> NSURLCONTION/COD>。

注意页面顶部的警告:请注意,我不再在这个库上工作了——您可能想考虑使用其他东西来进行新项目。是的,我刚刚看到了但我仍然认为这是一个很棒的库,如果一个人只关心其中的一些类,那么他自己维护它就相对容易。但是,嘿,我想这是我的观点:)是的,我知道拦网。Thnx for NSURLConnection=)查看以显示进度。