我有一个来自url的可变数据字典存储图像。所以如何在应用程序缓存中存储图像,我可以在没有互联网连接时查看图像。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString * CellIndentifier=@"CustomCell";
CustomCell *cell = (CustomCell*)[collectionView dequeueReusableCellWithReuseIdentifier:CellIndentifier forIndexPath:indexPath];
NSDictionary *dictVideo = [self.videoList objectAtIndex:indexPath.row];
[cell.indicator startAnimating];
//set title
NSString *titleVideo = [dictVideo objectForKey:@"Title"];
[cell.myLabel setText:titleVideo];
// set image url
NSString *urlVideo = [dictVideo objectForKey:@"Url"];
NSURL *url = [NSURL URLWithString:urlVideo];
cell.imageView.image = nil;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage * img = [[UIImage alloc]initWithData:data];
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"%ld %@ %@",(long)indexPath.row,titleVideo,url);
[cell.imageView setImage: img];
[cell.indicator stopAnimating];
});
});
return cell;
}
答案 0 :(得分:1)
你可以使用SDWebImage库,因为Umar Farooq说,它支持iOS 6和7 然后,您可以在.m文件中使用以下代码
#import "UIImageView+WebCache.h"
UIImage *Noimg = [UIImage imageNamed:@"noimg.png"];
[cell.PlaceImg setImageWithURL:[NSURL URLWithString:strImgname] placeholderImage:Noimg];
此处Noimg是占位符图片,当图像位置找不到图像时,它会自动按库管理
答案 1 :(得分:0)
NSURLCache已经为您完成此操作。您的应用程序已经有一个隐含的NSURLCache,可能没有磁盘持久性,因此您需要明确设置它:
NSURLCache *cache = [[NSURLCache alloc]initWithMemoryCapacity:(5 * 1024 * 1024) diskCapacity:(10 * 1024 *1024) diskPath:@"NSURLCache.db"];
[NSURLCache setSharedURLCache:cache];
从那时起,URL加载系统将在内存和磁盘上存储数据。这将允许它在没有连接时可用。你继续像往常一样提出请求,当他们从缓存中提供服务时,他们返回的速度要快得多。
如果要修改此行为,则应修改NSURLRequest使用的缓存策略(例如,NSURLRequestReturnCacheDataElseLoad或NSURLRequestReturnCacheDataDontLoad)。不幸的是,您使用的dataWithContentsOfURL:
没有提供机会。使用NSURLSessionTask或NSURLConnection将允许您这样做。
请记住,服务器会告诉客户端响应有效的时间长度,默认缓存策略是否遵循该规则。