如果需要,请下载UIImage并保存以供日后使用

时间:2012-05-28 04:38:47

标签: iphone objective-c ios5

所以,我有一个带有tableview的应用程序,可以显示来自web的图像(无论从哪里开始)

当视图加载下载开始时,但我想构建一个缓存来仅下载缓存中没有的图像。

我已经看过下载并保存在磁盘上的教程,但我该如何实现此验证? 只下载IF不是本地的,如果本地显示本地。

如何动态获取此图像?

几乎使用方法imageNamed所以当我需要构建表视图时,我只需调用[MyClass getImageWithName:(name)并且如果存在,则返回我的图像,如果没有将其放在下载队列上

为了说清楚,我的问题是:“我怎样才能从文件夹中轻松获得一张图片?”

2 个答案:

答案 0 :(得分:1)

做以下事情:

- (NSString *)ImagesDirectoryPath
{
NSFileManager *fileManger = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
basePath = [basePath stringByAppendingFormat:@"/Images"];
NSError *error;
 if(![fileManger fileExistsAtPath:basePath])
 {
    [fileManger createDirectoryAtPath:basePath withIntermediateDirectories:NO attributes:nil error:&error];
 }
return basePath;
}

此方法将返回文档目录下的图像路径

现在您有图像名称因此我们将在图像目录中检查其是否退出。如果退出然后使用该img或下载img然后存储它  //此代码将为cellForRowAtIndexPath

 NSString *strImgPath = [self ImagesDirectoryPath];
strImgPath = [strImgPath stringByAppendingFormat:[NSString stringWithFormat:@"/%@.png",imgName]];
 NSFileManager *fileManger = [NSFileManager defaultManager];
 if(![fileManger fileExistsAtPath:strImgPath]) //Check wether image exits at Image Folder in Doc Dir
 {//file not exists
    UIImage *imgForCell =  [MyClass getImageWithName:imgName];

   if(imgForCell)
   {
    NSData *dataImg = UIImagePNGRepresentation(imgForCell);
    if(dataImg)
    {
        [dataImg writeToFile:strImgPath atomically:YES];
    }
   }
    imgView.image=imgForCell; //Set Image in ImageView
 }
 else
 {//file exists
   NSData *imgData = [NSData dataWithContentsOfFile:strImgPath];
UIImage*imgFound = [UIImage imageWithData:imgData]; 
  imgView.image=imgFound; //Set Image in ImageView
 }

答案 1 :(得分:-1)

您可以编写一个保存/加载图像的功能。

以下是一个示例,说明如何从文档文件夹中保存/加载图像: http://www.friendlydeveloper.com/2010/02/using-nsfilemanager-to-save-an-image-to-or-loadremove-an-image-from-documents-directory-coding/

但建议将图像保存在Library / Caches