将 UIImage 保存到文件而不是 NSUserDefaults

Posted

技术标签:

【中文标题】将 UIImage 保存到文件而不是 NSUserDefaults【英文标题】:Saving UIImage to File instead of NSUserDefaults 【发布时间】:2015-05-12 13:32:48 【问题描述】:

所以我有一个数组,其中包含我想在本地存储的图像,因为每次下载它们都会花费不必要的精力。我已经读过我不应该将图像存储在 NSUserDefaults 中,这很好,但我无法找到任何关于如何将其作为文件存储在不变目录中的示例(ios 8 更改了每个构建的 UUID,每次我在 Xcode 中运行它时都会创建一个新文件夹。

我这里一般有两个问题:

    有人可以帮我把它翻译成 ObjC 吗?我无法对帖子发表评论,因为我没有足够的代表......这是我需要帮助的帖子后面的快速部分。 Save images in NSUserDefaults?

    我的另一个问题是,在本地保存数据似乎需要很多时间,无论是归档还是保存到 NSUserDefaults。这里发生的是我的应用程序的用户在数据存储在本地之前关闭了应用程序。有什么办法可以防止这种情况发生吗?当然,我可以添加一个 ActivityIndi​​cator,但我似乎找不到任何回调来告诉我保存数据的过程何时完成。

谢谢!

【问题讨论】:

只是不要存储图像的完整路径,并在每次要访问图像时构建文档目录的路径。这样,如果应用程序 UDID 发生更改,它不会影响您的路径。 【参考方案1】:

所以我设法解决了它。问题是我只是混淆了路径。如果其他人想要从原始帖子中的链接将 Swift 翻译成 ObjC,那就是:

NSString* relativePath = [NSString stringWithFormat:@"image_%d.jpg", 1];
NSString* realPath = [self documentsPathForFileName:relativePath];

// Write image data to user's folder
[self.ImageData writeToFile:realPath atomically:YES];

// Store path in NSUserDefaults
[defaults setObject:relativePath forKey:@"path"];

阅读

NSString *relativePath = [defaults objectForKey:@"path"];
NSString *realPath = [self documentsPathForFileName:relativePath];
self.ImageData = [NSData dataWithContentsOfFile:realPath];

【讨论】:

以上是关于将 UIImage 保存到文件而不是 NSUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

UIImage * 是 __NSCFArray 而不是 UIImage

将图像而不是 UIImage 上传到 Firestore

如何使用 NSFileManager 将 UIImage 保存到文件中?

如何将 UIImage 保存到文档目录?

iOS Swift - 在 UIImage 上画线以保存到文件

UIImage无法保存到文档文件夹ios