我想用userdefaults保存图像,并用此代码在另一个视图中使用它,但它显示一个错误。如何保存图像
UserDefaults.standard.set(img , forKey : "simg")
请帮我
我想用userdefaults保存图像,并用此代码在另一个视图中使用它,但它显示一个错误。如何保存图像
UserDefaults.standard.set(img , forKey : "simg")
请帮我
这就是我该怎么做的。您有多个地方将它保存到,用户的文档文件夹通常是最好的:
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)
}
不能直接保存一个UIImage到NSUserDefaults
。您可以将它保存为NSData
,但它确实不可取。 NSUserDefaults
意在存储键值对中的小部分信息。如果你开始在那里投掷图像,你可能会超载为它保留的空间。 NSUserDefaults
的内容写入plist。我相信任何时候你访问用户的默认值,它都会读取整个文件。如果你在那里放大图像,会导致大量不必要的I/O。
如果你仍然决定这样做(不推荐),here是从图像中获取NSData
对象的好帖子。
正如其他人所说,不保存图片到用户的默认值。它仅用于小数据量。
如果您只想在另一个视图控制器中传递图像,并且您不关心在用户退出并重新启动应用程序时使图像持续存在,只需传递图像prepareForSegue
即可。
首先,不要误用'UserDefaults'作为视图(控制器)之间的临时数据存储,其次,如果出现错误,那么'img'的类型不符合属性列表。 – vadian
最好是将图像保存到文档中,然后在'UserDefaults'中保存图像的路径,这将是一件容易的事情。 –
@ MoeAbdul-Hameed我该怎么做!? – MJP