缓存图像表

时间:2014-05-24 11:13:06

标签: ios iphone objective-c caching

我希望能够离线查看我的应用以及我桌面上的所有图片。目前我的所有图片都被缓存了。但不是实际的结果表。

NSMutableArray *images;
- (void)viewDidLoad
{
NSURL *url = [NSURL URLWithString:@"http://xxxxxxx.co.uk/jsonimages.php"];
        NSData *jsonData = [NSData dataWithContentsOfURL:url];
        NSError *error = nil;

        if (jsonData) {

            NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonData
                                                                   options:NSJSONReadingMutableContainers error:&error];
            images = result[@"images"];
        }
}

所以这给了我一个图片网址列表,然后我在桌子上就像这样:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableCell";

    SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

[cell.thumbnailImageView setImageWithURL:[NSURL URLWithString:encodedString]
                            placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
}

使用SDWebimage

缓存encodedString

但是,如果我在没有任何访问互联网的情况下访问应用程序,则不会显示任何图像。这是因为我需要缓存数组吗?

2 个答案:

答案 0 :(得分:2)

您在没有互联网的情况下午餐时看不到图像,因为您正在使用内存缓存。如果您希望在退出应用程序时图像仍然存在,则应使用磁盘缓存。您可以配置SDWebimage库来为您处理此问题。

来自SDWebimage文档:

  

也可以使用基于aync的图像缓存存储   独立。 SDImageCache维护内存缓存和可选   磁盘缓存。磁盘高速缓存写操作是异步执行的   它没有为UI添加不必要的延迟。

Complete documentattion

编辑: 你可以这样做(代码没有经过测试):

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableCell";

    SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    SDImageCache *imageCache = [SDImageCache sharedImageCache];
    [imageCache queryDiskCacheForKey:encodedString done:^(UIImage *image, SDImageCacheType cacheType) {

 if (image){
             cell.thumbnailImageView.image = image;
         }else{
 [cell.thumbnailImageView setImageWithURL:[NSURL URLWithString:encodedString] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
            [imageCache storeImage:image forKey:encodedString];

        }];  
}


    }];

return cell;
}

答案 1 :(得分:0)

我建议使用核心数据来存储驱动表格视图的信息,您也可以将图像下载到文档目录,并在核心数据中存储对磁盘位置的引用,看看herehere获得Ray Wenderlich的一些很棒的教程