2017-05-15 3 views
1

Ich möchte Datei-Download-Manager erstellen, um mehrere Dateien mit Download Prozent mit Play Pause löschen Funktionalität herunterladen.Datei-Downloader Verwenden von NSURLSessionTask downloadTask

ich Code unten versuchen, erfolgreich mehrere Datei herunterzuladen ... aber nicht in der Lage Fortschrittsbalken fügen Sie bitte enter image description here

enter image description here

for (int i = 0; i < [arr_bookChapter count]; i++) { 
    NSURLSessionTask * downloadTask = [session downloadTaskWithURL: downloadfileUrl completionHandler:^(NSURL * location, NSURLResponse * response, NSError * error) { 
     if (error == nil) { 
      NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *) response; 

      if ([httpResponse statusCode] == 200) { 

       //download file save here              

       dispatch_queue_t backgroundQueue = dispatch_queue_create("dispatch_queue_#1", 0); 
       dispatch_async(backgroundQueue,^{ 

        dispatch_async(dispatch_get_main_queue(),^{ 
         // NSError *error; 

         //download complete here 

        }); 
       }); 
      } 
     } else { 
      //faile             
     } 

    }]; 
    [downloadTask resume]; 
} 

Hier helfen habe ich swift code: Kann jemand erstellen oder oder teilen Lösung für Objective-C

+0

meine Antwort überprüfen. –

Antwort

1

Sie können dies einfach tun, müssen Sie nur diese Delegaten in Ihrem ViewContorller implementieren.

<NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSessionTaskDelegate> 

Und als Sie diesen Code folgen müssen:

@property (nonatomic, retain) NSMutableData *dataToDownload; 
@property (nonatomic) float downloadSize; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 

    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]]; 

    NSURL *url = [NSURL URLWithString: @"your url"]; 
    NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithURL: url]; 

    [dataTask resume]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { 
    completionHandler(NSURLSessionResponseAllow); 

    progressBar.progress=0.0f; 
    _downloadSize=[response expectedContentLength]; 
    _dataToDownload=[[NSMutableData alloc]init]; 
} 

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { 
    [_dataToDownload appendData:data]; 
    progressBar.progress=[ _dataToDownload length ]/_downloadSize; 
} 
+0

NSURLSessionTask für eine Dateischleife bedeutet mehrere Dateien? – iphonemaclover

+0

Ja, es funktioniert auch für mehrere Dateien –

+0

Sie müssen nur Schleife hinzufügen –

Verwandte Themen