BDMultiDownloader 0.0.3

BDMultiDownloader 0.0.3

测试已测试
Lang语言 Obj-CObjective C
许可证 BSD
发布上次发布2014年12月

norsez维护。



  • Norsez Orankijanan

BDMultiDownloader - 仅基于NSURLConnection的简单Objective-C基于块并发多URL数据下载器

你的应用程序需要从多个URL(本地或远程)并发下载。这个类通过使用块和NSURLConnection以简单的方式完成。

特性

  • 使用块接收下载数据
  • 每个下载的下载进度
  • 取消下载或所有下载
  • 自动缓存
  • 下载多个图像的便捷方法
  • 已在iOS上测试,但也应在Mac OS上工作。

要求

  • 需要ARC

如何工作

无需复杂设置。只需将类头包含在你的源代码中即可,如下所示

#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.";
};

如果您也使用了 AFNetworkingAFNetworkActivityIndicatorManager,您在这处进行活动计数的变化。

网络错误时

由于这个类最初是为下载多个相同类型的数据设计的,因此没有特定的方式来处理每个特定的下载失败。然而,当发生错误时,您可以通过 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 开发者使用 NSURLRequestNSMutableURLRequest 类来构建这些复杂的请求,例如定义 HTTP 标头、HTTP 方法等。

JSON 请求的方便方法

JSON 请求的方便方法是利用 NSURLRequest 版本调用来异步向端点发送请求,并通过带有返回 JSON 对象(通常依赖于提供的 NSJSONReadingOptions 为 NSArray 或 NSDictionary 类型的变体)的块完成。


如何使用

  • 请确保查看最新 标签,而不是最新的提交。只有打上标签的点才是稳定的。
  • 如果没有 CocoaPods,只需在 Classes 文件夹中包含 h/.m 文件到您的源代码中
  • 查看 iPhone 演示。阅读评论。如果有问题,请向我提问。

使用 BDMultiDownloader 的应用


许可

BDMultiDownloader 在 BSD 许可下发布。更多信息请参阅 LICENSE 文件。