0

所以,我有一个带有表格视图的应用程序,它显示来自网络的图像(无论从哪里来)

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

我已经看到了下载和保存在磁盘上的教程,但是我怎样才能实现这个验证呢?只下载如果不是本地的,如果是本地的则显示本地的。

如何动态获取这些图像?

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

为了清楚起见,我的问题是:“我怎样才能轻松地从文档文件夹中获取一张图像?”

4

2 回答 2

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

此方法将返回 Document Directory 下的 Your Images Path

现在你有图像名称所以我们将检查图像目录是否存在。如果退出,则使用该 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
 }
于 2012-05-28T06:09:18.923 回答
-1

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

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

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

于 2012-05-28T04:43:56.073 回答