如何在iOS应用中保存用户头像

时间:2014-01-17 10:48:50

标签: php ios ios7

我的应用程序从PHP json回复中检索图像,但我如何在我的应用程序中存储用户头像?我总是必须在我以前的工作中存储用户名,我只是使用 NSUserDefaults 。 我读到了关于 NSCoding 的实现,但我不明白完整的流程,有人可以向我解释一下吗?

我的目标是存储该图像以便快速显示(我需要在每个视图中显示该图像),而不是每次都从服务器加载。

由于

3 个答案:

答案 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)

获得图片后,您可以使用UIImageJPEGRepresentationUIImagePNGRepresentation获取图片数据。获得图像数据后,可以使用writeToFile:options:error:将其保存到磁盘。然后将来可以使用UIImage initWithContentsOfFile:加载它。

现在您需要做的就是存储您保存图像的位置(硬编码或用户默认值)。

答案 2 :(得分:0)

您可以将图像写入文件系统,ios中的每个应用程序都有文档文件夹。您还可以将coredata中的图像保存为二进制对象,如NSData。除此之外,您可以保存文件系统并将URL保存在数据库中。

在启动时将图像加载到内存并在任何视图中使用它。这将是最好的。如果您从服务器加载avtar,可能会更改头像。您可以从服务器加载头像,并且当您尝试再次访问该图像时,可以将其缓存在会话中,而不需要从服务器获取它。