nac*_*n f 4 nsuserdefaults uiimageview uiimage swift
当我尝试在NSUserDefaults中保存图像时,应用程序因此错误而崩溃.
为什么?是否可以使用NSUserDefaults保存图像?如果没有,那么如何保存图像?
图片...

码...
var image1:UIImage = image1
var save1: NSUserDefaults = NSUserDefaults.standardUserDefaults()
save1.setObject(Info.Image1, forKey: "Image1")
save1.synchronize()
Run Code Online (Sandbox Code Playgroud)
记录错误...
libc ++ abi.dylib:以NSException类型的未捕获异常终止(lldb)
nhg*_*rif 15
NSUserDefaults不仅仅是一辆大卡车,你可以扔任何你想要的东西.这是一系列只有特定类型的管子.
您可以保存到NSUserDefaults:
NSDataNSStringNSNumberNSDateNSArrayNSDictionary如果您正在尝试保存其他内容NSUserDefaults,则通常需要将其存档到NSData对象并存储它(请记住,您需要在以后需要时将其取消归档).
将UIImage对象转换为数据有两种方法.存在用于创建图像的PNG表示或图像的JPEG表示的功能.
对于PNG:
let imageData = UIImagePNGRepresentation(yourImage)
Run Code Online (Sandbox Code Playgroud)
对于JPEG:
let imageData = UIImageJPEGRepresentation(yourImage, 1.0)
Run Code Online (Sandbox Code Playgroud)
其中第二个参数CGFloat表示压缩质量,0.0质量最低,质量1.0最高.请记住,如果您使用JPEG,每次压缩和解压缩时,如果您使用的是其他任何东西1.0,那么随着时间的推移,您将会降低质量.PNG是无损的,因此您不会降低图像质量.
要从数据对象中恢复图像,有一种init方法UIImage可以执行此操作:
let yourImage = UIImage(data:imageData)
Run Code Online (Sandbox Code Playgroud)
无论您如何将UIImage对象转换为数据,此方法都将起作用.
为了节省UIImage在NSUserDefaults,你需要转换UIImage成NSData使用UIImageJPEGRepresentation(image, 1)然后将其保存NSUserDefaults.而另一方面,当在另一个ViewController(在同一个应用程序中)检索它时,你需要获取NSData然后将其转换为UIImage.
在这里,我正在swift中编写小代码片段来演示这一点.我在XCODE 6.4中试过这个
/*Code to save UIImage in NSUserDefaults on viewWillDisappear() event*/
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
//Get some image in image variable of type UIImage.
var image = ....
let defaults = NSUserDefaults.standardUserDefaults()
var imgData = UIImageJPEGRepresentation(image, 1)
defaults.setObject(imgData, forKey: "image")
}
/*Code to get Image and show it on imageView at viewWillAppear() event*/
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
let defaults = NSUserDefaults.standardUserDefaults()
if let imgData = defaults.objectForKey("image") as? NSData
{
if let image = UIImage(data: imgData)
{
//set image in UIImageView imgSignature
self.imgSignature.image = image
//remove cache after fetching image data
defaults.removeObjectForKey("image")
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7795 次 |
| 最近记录: |