点击取消下载

时间:2015-01-15 17:58:08

标签: ios objective-c nsurlconnection

我想做以下事情:

1)下载一系列文件,其URL存储在NSMutableArray中。

2)在下载过程中,MBProgressHUD显示下载状态。

3)在任何下载点,我想在用户触摸屏幕时取消下载。

-(void)singleTap:(UITapGestureRecognizer*)sender
{
NSLog(@"%@",@"tapped");
self.downLoadHud.detailsLabelText=@"";
self.downLoadHud.labelText=[SAGlobal stringForValue:@"CANCELLINGDOWNLOAD"];
SharedAppDelegatee.downLoadCancelFlag=YES;

}

-(void) startFileDownLoadingWithHUD
{

self.downLoadHud=[MBProgressHUD showHUDAddedTo:[SharedAppDelegatee window] animated:YES];
self.downLoadHud.mode = MBProgressHUDModeIndeterminate;
UITapGestureRecognizer *HUDSingleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleTap:)];
[self.downLoadHud addGestureRecognizer:HUDSingleTap];
self.downLoadHud.labelText = @"Initialising..";
self.downLoadHud.detailsLabelText =@"";
[self.downLoadHud setColor:[UIColor blackColor]];
dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(dispatchQueue, ^(void)
{

    [self startAllFilesInArrayDownload];
    //downloadcancelled or downloadfinished
    while (!(SharedAppDelegatee.downLoadCancelFlag)||(SharedAppDelegatee.SAdownloadMode==0)) {

         self.downLoadHud.labelText =[NSString stringWithFormat:@"Downloading..[%d/%d]",self.self.downloadErrorCount+self.downloadSuccessCount,[filesToDownLoad count]];
          self.downLoadHud.detailsLabelText =[SAGlobal stringForValue:@"TAPTOCANCEL"];
        //NSLog(@"DOWNLOADING------+");
    }
    ////////////////////////////////
    dispatch_sync(dispatch_get_main_queue(), ^{
        [self.downLoadHud hide:YES];
        //downLoadHud
    });
});

}

下载完成

for (downDict in filesToDownLoad)
{
    //[adm downloadURL:[downDict objectForKey:@"url"]  destPath:[downDict objectForKey:@"toFile"]];
    NSURL *aUrl = [NSURL URLWithString:[downDict objectForKey:@"url"]];
    [self.downloadManager addDownloadWithFilename:[downDict objectForKey:@"toFile"] URL:aUrl];
    //[urlStringsArray addObject:[downDict objectForKey:@"url"]];
}

" downloadManager"是一个类的对象" DownloadManager"得到的 https://github.com/robertmryan/download-manager

我可以成功下载所有文件。我无法在下载过程中取消下载。当用户点击按钮时,它会等待很长时间,过了一段时间后," singleTap"方法被调用。 下载和失败的文件数正确显示。我的代码出了什么问题?任何人都可以建议我一个更好的例子或方式处理"显示繁忙的hud +下载+点击取消功能类似如下所示。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

虽然我确信这是一个很好的实用工具并且进行了很多工作但当我看到回购已经两年了时,我立刻感到担心。
这些类型的东西是一个很大的帮助,我不能开始表达我对作者和他们慷慨分享这么多努力工作的赞赏。不幸的是,如果没有维护它们,那么用户可能很难更新。

Apple最近推出了NSURLSession的新功能。

这非常容易使用,并且比NSURLConnection强大得多。

它具体包括暂停,恢复和取消网络下载的功能。