CoreData和图像的URL

时间:2014-09-09 21:40:26

标签: ios core-data uiimage nsdata

在我的应用程序中,我从Web服务中收到一些Json数据。

我在核心数据模型中映射了这个日期。

在某些实体中,我有一个字段代表我必须显示的图像的URL。 管理这种情况的更好方法是什么?

您可以在我的实体类型NSData中添加一个字段来保存图像,因此我们有一个简单的缓存。

否则我可以实现一个真正的缓存来获取已经下载的图像:es:getImageByURL(保存已下载到目录中的图像)

CoreData中是否存在针对此类情况的特定解决方案?

2 个答案:

答案 0 :(得分:0)

它确实是您的应用程序设计决策。对于任何情况,如果您想将整个图像放入基础表,您可以使用' BinaryData'格式(BLOB)。有不同的方式,

对于始终在线的应用 1.将URL存储到核心数据并从URL获取。

离线支持。 1.将图像存储为blob 2.存储到文档文件夹,并在核心数据中引用文件 3.使用支持Web缓存的第三方库并存储URL。再次获取URL时,Web缓存将返回缓存的图像。如果内容必须循环一段时间并且需要离线模式,这可能优于其他两个。

答案 1 :(得分:0)

我们必须处理两个案例   - 在线   - 离线

<强> 1。在线

  • 如果您的应用仅支持在线,则最好使用以下应用 https://github.com/enormego/EGOImageLoading

    使用步骤

  • 首先下载文件夹并将其拖到项目中

  • 首先将此行添加到您的文件#import "EGOImageView.h"

  • 添加以下代码以直接添加您的图像

EGOImageView * egoImgView = [[EGOImageView alloc] initWithFrame:CGRectMake(0,0,290,118)];         complaintImgView.imageURLString = [NSString stringWithFormat:@“%@”,imageURLString];

<强> 2。离线:

  • 如果您的应用同时支持在线和离线,只需将图像名称保存在coredata中,下载并将图像保存在文档路径中。
  • 以下是在coredata中保存名称的文档路径中保存图像的代码。

#define DOCUMENTS_PATH [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0] stringByAppendingPathComponent:@“Download”]

将图像存储在文档路径中

- (void)saveImageSynchronouslyInDocumentsWithUrl:(NSString *)serverImageURL withName:(NSString` `*)coredataImageName`
    {
 NSLog(@"Synchronous Image urls %@",serverImageURL);

NSURL *url = [NSURL URLWithString: imageUrl];

NSString *imagePath = [DOCUMENTS_PATH stringByAppendingPathComponent:imageName];

NSError *error = nil;

NSData *imageData = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error: &error];
if (!error) {
    [imageData writeToFile:imagePath atomically:YES];

}
}

从文档路径中检索图像

UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",DOCUMENTS_PATH, coredataImageName]];