Я написал небольшой класс для загрузки изображений с использованием NSURLConnection.Идея состоит в том, чтобы делегировать загрузку этому классу, чтобы не блокировать выполнение.
Поэтому я передаю целевой UIImageView (по ссылке) и URL-адрес функции и начинаю загрузку:
-(void)getImage:(UIImageView**)image formUrl:(NSString*)urlStr
{
NSLog(@"Downloader.getImage.url.debug: %@",urlStr);
NSURL *url = [NSURL URLWithString:urlStr];
NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:5.0];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:req delegate:self];
[conn addObject:c];
int i = [conn indexOfObject:c];
[imgs insertObject:*image atIndex:i];
[c release];
}
Когда закончите, установите изображение и обновите imageView:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
int i = [conn indexOfObject:connection];
NSData *rawData = [buffer objectAtIndex:i];
UIImage *img = [UIImage imageWithData:rawData];
UIImageView *imgView = [imgs objectAtIndex:i];
imgView.image = img;
[imgView setNeedsDisplay];
[conn removeObjectAtIndex:i];
[imgs removeObjectAtIndex:i];
[buffer removeObjectAtIndex:i];
if ([conn count]==0) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
}
Эта система работает довольно хорошо, но я не могу обновить UIImageView внутри ячеек UITableViewCell, вы понимаете?(на самом деле ячейка обновляется, когда я нажимаю на нее) Есть ли лучший способ реализовать эту функцию?(на самом деле нужны: неблокирующая, кеширующая система)