在我的应用程序中,我从Web服务中收到一些Json数据。
我在核心数据模型中映射了这个日期。
在某些实体中,我有一个字段代表我必须显示的图像的URL。 管理这种情况的更好方法是什么?
您可以在我的实体类型NSData中添加一个字段来保存图像,因此我们有一个简单的缓存。
否则我可以实现一个真正的缓存来获取已经下载的图像:es:getImageByURL
(保存已下载到目录中的图像)
CoreData中是否存在针对此类情况的特定解决方案?
答案 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。离线:强>
#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]];