我想使用userdefaults保存图像,并使用此代码在另一个视图中使用它,但它显示错误。
UserDefaults.standard.set(img , forKey : "simg")
请帮帮我
答案 0 :(得分:1)
我就是这样做的。您有多个地方可以将其保存到,用户的文档文件夹通常是最好的:
func cacheImageAsPNG(image: UIImage, localID: String) {
let userDocumentsURL = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
if let imageData = UIImagePNGRepresentation(image) {
let filename = userDocumentsURL.appendingPathComponent("\(localID).png")
if FileManager.default.createFile(atPath: filename.path, contents: imageData, attributes: nil) {
print("wrote file:\n\(filename.path)")
} else {
print("couldn't write the file:\n\(filename.path)")
}
}
}
如果您希望在内存使用高峰期间系统删除它,缓存目录是一个更好的地方:
let cachesPath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).last!
编辑:检索图像
func cachedImage(localID: String) -> UIImage? {
let userDocumentsURL = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let cachePath = userDocumentsURL.appendingPathComponent("\(localID).png")
return UIImage(named: cachePath.path)
}
答案 1 :(得分:0)
您无法将UIImage直接保存到NSUserDefaults
。您可以将其保存为NSData
,但这确实不可取。 NSUserDefaults
用于在键值对中存储少量信息。如果你开始在那里投掷图像,你可能会重载为它保留的空间。 NSUserDefaults
的内容写入plist。我相信每次访问用户默认值时,它都会读取整个文件。如果您在其中放置大图像,则会导致大量不必要的I / O.
如果您仍然决定这样做(不推荐),here是从图片中获取NSData
对象的好帖子。
答案 2 :(得分:0)
正如其他人所说,不要将图像保存为用户默认值。它仅适用于少量数据。
如果您要做的只是在另一个视图控制器中传递图像,并且在用户退出并重新启动应用程序时您不关心使图像保持不变,只需在{{1}中传递图像即可}。