xcode - Swift - 从 userDefaults 保存和检索图像

标签 xcode swift uiimageview nsuserdefaults nsdata

我正在尝试像这样保存从 Parse.com 检索到的图像:

                    let userImageFile = object["Image"] as PFFile
                    userImageFile.getDataInBackgroundWithBlock {
                        (imageData: NSData!, error: NSError!) -> Void in
                        if error == nil {
                            image = UIImage(data:imageData)
                            let imageToSave:NSData = UIImagePNGRepresentation(image)
                            self.saveImage(intRandomNumb, retImage: imageToSave)
                        }
                    }

saveImage 函数看起来像这样:

func saveImage(imagepath:Int, retImage:NSData){

    println("image is being saved")

    let defaults = NSUserDefaults.standardUserDefaults()
    let imagePathName = "\(imagepath)"

    defaults.setObject(retImage, forKey: imagePathName)

}

后来,我尝试像这样显示这张图片:

        var point = gestureRecognizer.locationInView(self.tv)
        if let indexPath = self.tv.indexPathForRowAtPoint(point)
        {
            let data = mainList[indexPath.row] as SecondModel
            let fileRef = data.fileReference
            let intFileRef = Int(fileRef)
            println(intFileRef)

            let defaults = NSUserDefaults.standardUserDefaults()
            let usedKeyName = "\(intFileRef)"

            if let photo = defaults.objectForKey(usedKeyName) as? UIImage {
                println("Image created")
                let photo = defaults.objectForKey(usedKeyName) as UIImage

                var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
                imageView.image = photo
                self.view.addSubview(imageView)
            }

并且“创建的图像”永远不会被打印出来,这意味着检索无法正常工作。 我不太确定你是否能够像我在这里所做的那样将图像保存到 userdefaults,但这是我能想到的最好的,而且我找不到任何像这样的 Swift 以前的问题。

如有任何关于如何进行的建议,我们将不胜感激。

解决方案:问题是我试图将图像直接加载为 UIImage。我还必须将 NSData 转换为 UIImage,这一切都发生在上面显示的代码的最后一部分。最后我的代码是这样的:

        if let photo = defaults.objectForKey("\(intFileRef)") as? NSData {
            println("Image created")
            let photo = defaults.objectForKey("\(intFileRef)") as NSData
            let imageToView:UIImage = UIImage(data: photo)

            var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
            imageView.image = imageToView
            self.view.addSubview(imageView)
        }

我希望这可以帮助其他遇到类似问题的人。

最佳答案

swift 3

嘿,在这里试试这个漂亮的代码:

  • 将您的 UIImage 转换为 Data

    PNG:

  yourDataImagePNG = UIImagePNGRepresentation(yourUIImageHere)

JPEG 格式:

 yourDataImageJPG = UIImage(data: yourUIImageHere,scale:1.0)
  • 保存在 UserDefaults 中。
    UserDefaults().set(yourDataImagePNG, forKey: "image")
  • 恢复自:
    UserDefaults.standard.object(forKey: "image") as! Data

希望能帮到你!

关于xcode - Swift - 从 userDefaults 保存和检索图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27858250/

相关文章:

ios - 应用程序在iOS 10及更早版本上使用 “Could not instantiate class named _UIScrollViewLayoutGuide”崩溃

ios - 如何在头文件中使用预处理器检查?

swift - 可以创建枚举作为另一个枚举的一部分吗?

ios - UIImageView 在动画时不剪裁到 UIView 边界

ios - 根据 ImageView 大小更改 View 位置

ios - UIImageView - 如何获取分配的图像的文件名?

iphone - 如何取消基于 UIView block 的动画?

iphone - 是否可以同时使用 UIPanGesture 和 UISwipeGesture?

ios - 如何让WKWebView在后台显示

ios - 将一种印地语语言数字转换为阿拉伯语语言数字