我的应用程序从PHP json回复中检索图像,但我如何在我的应用程序中存储用户头像?我总是必须在我以前的工作中存储用户名,我只是使用 NSUserDefaults 。 我读到了关于 NSCoding 的实现,但我不明白完整的流程,有人可以向我解释一下吗?
我的目标是存储该图像以便快速显示(我需要在每个视图中显示该图像),而不是每次都从服务器加载。
由于
答案 0 :(得分:1)
扩展UIImageView(创建一个类别)并使用此代码。也可以使用UIImageView+AFNetworking。
- (void)setDownloadedImage:(NSString *)imageName{
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSString *localImagePath = [libraryPath stringByAppendingPathComponent:imageName];
// Check if the image is already downloaded
if (![[NSFileManager defaultManager] fileExistsAtPath:localImagePath]) {
// Store image
NSURL *serverFilePath = [NSURL URLWithString:[NSString stringWithFormat:@"%@/images/avatars/%@", SERVER_URL, imageName]];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *imageData = [NSData dataWithContentsOfURL:serverFilePath];
[imageData writeToFile:localImagePath atomically:YES];
// Switch back to the main thread to update the UI
dispatch_sync(dispatch_get_main_queue(), ^{
[self setImageWithURL:[NSURL fileURLWithPath:localImagePath] placeholderImage:nil];
});
});
}
else{
[self setImageWithURL:[NSURL fileURLWithPath:localImagePath] placeholderImage:nil];
}
}
它检查图像是否已经下载,如果不是,它将被存储并从磁盘读取。如果已经下载,它也将从磁盘读取。
答案 1 :(得分:0)
获得图片后,您可以使用UIImageJPEGRepresentation
或UIImagePNGRepresentation
获取图片数据。获得图像数据后,可以使用writeToFile:options:error:
将其保存到磁盘。然后将来可以使用UIImage initWithContentsOfFile:
加载它。
现在您需要做的就是存储您保存图像的位置(硬编码或用户默认值)。
答案 2 :(得分:0)
您可以将图像写入文件系统,ios中的每个应用程序都有文档文件夹。您还可以将coredata中的图像保存为二进制对象,如NSData。除此之外,您可以保存文件系统并将URL保存在数据库中。
在启动时将图像加载到内存并在任何视图中使用它。这将是最好的。如果您从服务器加载avtar,可能会更改头像。您可以从服务器加载头像,并且当您尝试再次访问该图像时,可以将其缓存在会话中,而不需要从服务器获取它。