Ich habe eine TableView mit customCells, wenn der Benutzer die Start-Taste auf einer Zelle drücken, beginnt das Laden. Da es viele solcher Zellen gibt, muss ich dieses Herunterladen parallel (asynchron) implementieren. Für Bilder zum Herunterladen und die Zelle in Tabellenansicht Aktualisierung verwende ich nächsten Code:Bilder für UITableView mit NSURLConnection asynchron herunterladen
#define myAsyncQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
ich diese Methode in die Asynchron-Warteschlange bin, dass ich parallel Herunterladen von Bildern ermöglichen sollte sollte. - (void) didClickStartAtIndex: (NSInteger) cellIndex withdata:
(CustomTableViewCell*)data
{
dispatch_async(myAsyncQueue, ^{
self.customCell = data;
self.selectedCell = cellIndex;
ObjectForTableCell* tmp =[self.dataDictionary objectForKey:self.names[cellIndex]];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:tmp.imeageURL]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:60.0];
self.connectionManager = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
});
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.urlResponse = response;
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSDictionary *dict = httpResponse.allHeaderFields;
NSString *lengthString = [dict valueForKey:@"Content-Length"];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSNumber *length = [formatter numberFromString:lengthString];
self.totalBytes = length.unsignedIntegerValue;
self.imageData = [[NSMutableData alloc] initWithCapacity:self.totalBytes];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.imageData appendData:data];
self.customCell.progressView.progress = ((100.0/self.urlResponse.expectedContentLength)*self.imageData.length)/100;
float per = ((100.0/self.urlResponse.expectedContentLength)*self.imageData.length);
self.customCell.realProgressStatus.text = [NSString stringWithFormat:@"%0.f%%", per];
}
I tried to set this block to queue - main queue - cause its the place where image is already downloaded,
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
dispatch_async(dispatch_get_main_queue(), ^{
self.customCell.realProgressStatus.text = @"Downloaded";
UIImage *img = [UIImage imageWithData:self.imageData];
self.customCell.image.image = img;
self.customCell.tag = self.selectedCell;
});
[self.savedImages setObject:img forKey:self.customCell.nameOfImage.text];
NSNumber *myNum = [NSNumber numberWithInteger:self.selectedCell];
[self.tagsOfCells addObject:myNum];
}
Ohne alle Warteschlangen (wenn ich es kommentieren) funktioniert alles richtig - aber nur 1 Download auf einer Eins. Aber als ich versuchte, Code mit Warteschlangen als Ergebnis zu implementieren, wird nichts heruntergeladen. Ich verstehe, dass ich etwas falsch gemacht habe, aber ich kann es nicht definieren.
Vielen Dank für jede Hilfe im Voraus.
[nur versuchen, diese lib] (https://github.com/rs/SDWebImage) –
@Fahim Ich danke Ihnen für einen Rat, ich lerne, und wollte es selbst implementieren, ohne irgendeine Bibliothek von Dritten, gut zumindest versuchen, es selbst zu tun – Melany