私はカスタムセルを持つTableViewを持っています。このようなセルがたくさんあるので、このダウンロードを並列に(非同期に)実装する必要があります。私は画像の並列ダウンロードを有効にする必要が想定こと非同期キューにこの方法を、含むNSURLConnectionを使用してUITableViewの画像を非同期にダウンロードします。
#define myAsyncQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
:画像のダウンロードとテーブルビューのセルを更新するため 私は次のコードを使用します。 - (無効)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];
}
すべてのキューがなければ(私はそれをコメント)すべてが正常に動作します - しかし、もののちょうど1ダウンロード。 しかし、結果としてキューを持つコードを実装しようとすると、何もダウンロードされません。私はsmhを間違えたと理解していますが、私はそれを定義することはできません。
事前にお問い合わせいただきありがとうございます。
[ちょうどこのLIBを試す](https://github.com/rs/SDWebImage) –
@Fahim:AFNetworking
EDITを使用して、画像のダウンロードについては
アドバイスをいただき、ありがとうございました。私は学んでおり、第三者の図書館がなくても自分で実装したいと思っています。少なくとも自分でやろうとしています。 – Melany