2014-05-24 179 views
0

我希望能夠離線查看我的應用程序以及我的表中的所有圖像。目前我所有的圖像都被緩存。但不是實際的結果表格。圖像緩存表

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"]]; 
} 

用於緩存encodedString使用SDWebimage

但是,如果我去到應用程序沒有任何訪問互聯網的圖像沒有出現。這是因爲我需要緩存數組?

+0

只需使用** ** AMAZING DLImageLoader。完整的代碼示例.. http://stackoverflow.com/a/19115912/294884 – Fattie

回答

2

因爲您正在使用內存緩存,所以您在沒有互聯網的情況下執行應用程序時看不到圖像。如果您希望在退出應用程序時仍然有圖像,則應使用磁盤緩存。您可以配置SDWebimage庫來爲您處理。

SDWebimage文檔:

It is also possible to use the aync based image cache store independently. SDImageCache maintains a memory cache and an optional disk cache. Disk cache write operations are performed asynchronous so it doesn't add unnecessary latency to the 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; 
} 
+0

嘿謝謝分享這個。我將如何使用我的代碼實現這一點?我不太明白文檔是[this](https://github.com/rs/SDWebImage#using-asynchronous-image-caching-independently)我應該看的那個? – maxisme

+0

看我的編輯。代碼未經測試 – samir

+0

什麼是「圖像」? (')(UIImage * __ strong,SDImageCacheType)')' – maxisme

0

我會建議使用核心數據來存儲驅動您的表視圖的信息,您也可以將圖像下載到文檔目錄並在核心數據中存儲磁盤位置的引用,查看herehere Ray Wenderlich提供的一些很棒的教程