你的应用程序需要从多个URL(本地或远程)并发下载。这个类通过使用块和NSURLConnection以简单的方式完成。
无需复杂设置。只需将类头包含在你的源代码中即可,如下所示
#import "BDMultiDownloader.h"
检索单例实例。《强烈建议》不要执行alloc init
[BDMultiDownloader shared]
最常见的使用情况是从网络上某个地方并发下载多个图像。只需做如下操作
NSArray * pathsToImages = … //NSString paths to your images
for (NSString *path in pathsToImages){
[[BDMultiDownloader shared] imageWithPath:path
completion:^(UIImage * image, BOOL fromCache) {
//here is the block where you receive your downlaoded image
//the fromCache var is a flag for whether the image is fresh
//downloaded off the web or from the singleton's
//automatic cache
//use your downloaded image…
}];
}
在完成块中,你可以获得每个图像的UIImage以及一个标志,表示它是否来自类的自动缓存(注意:有时候你可能想根据是否是新下载的图像和已显示在屏幕上的图像来执行不同的UI更新)。
请注意,下载请求路径必须是带有http://
或file://
协议的绝对URL字符串。
最通用的情况是从形式为NSData
的数据中下载。这可能包括从HTML内容到数据文件,再到JSON等。以下是一个检索JSON的示例
[[BDMultiDownloader shared] queueRequest:pathToJSON
completion:^(NSData *data){
if (data == nil){
//bail out if data is nil.
return;
}
NSDictionary jsonObject = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:nil];
//do something useful with your download JSON
[self processJSON:jsonObject];
}];
执行操作...
[[BDMultiDownloader shared] dequeueWithPath:@"http://imgurl.com/apicture.jpg"];
正在进行的下载被立即取消,与其相关的完成块被删除且未触发。
[[BDMultiDownloader shared] clearQueue];
这立即取消所有正在进行的下载及其相关完成块。
通过设置onNetworkActivity
块来跟踪类单例的网络活动。
[BDMultiDownloader shared].onNetworkActivity = ^(BOOL isActive){
self.networkStatusText = isActive?@"Downloading…":@"Done.";
};
如果您也使用了 AFNetworking
的 AFNetworkActivityIndicatorManager
,您在这处进行活动计数的变化。
由于这个类最初是为下载多个相同类型的数据设计的,因此没有特定的方式来处理每个特定的下载失败。然而,当发生错误时,您可以通过 onNetworkError
块来获得通知。该块会在接收到每个下载请求的错误时触发。
[BDMultiDownloader shared].onNetworkError= ^(NSError *error){
//your app can do something with the error.
[self alertError:error];
};
可以使用 onDownloadProgressWithProgressAndSuggestedFilename
块来跟踪每个下载请求的进度。进度以 0.0 到 1.0 的范围返回(从开始到结束)。建议的文件名通常是您的下载请求路径中的最后一部分,但在某些情况下可能是 nil。该块会在所有正在进行的下载中触发。
NSURLRequest
API 版本一些请求比简单的 HTTP URL 路径要复杂得多。iOS 开发者使用 NSURLRequest
或 NSMutableURLRequest
类来构建这些复杂的请求,例如定义 HTTP 标头、HTTP 方法等。
JSON 请求的方便方法是利用 NSURLRequest
版本调用来异步向端点发送请求,并通过带有返回 JSON 对象(通常依赖于提供的 NSJSONReadingOptions 为 NSArray 或 NSDictionary 类型的变体)的块完成。
BDMultiDownloader 在 BSD 许可下发布。更多信息请参阅 LICENSE 文件。