Swift - 从 userDefaults 保存和检索图像

mar*_*tin 1 xcode nsuserdefaults uiimageview nsdata swift

我正在尝试保存从 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)
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

saveImage 函数如下所示:

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

    println("image is being saved")

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

    defaults.setObject(retImage, forKey: imagePathName)

}
Run Code Online (Sandbox Code Playgroud)

后来,我试图像这样显示这个图像:

        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)
            }
Run Code Online (Sandbox Code Playgroud)

并且“创建的图像”永远不会被打印,这意味着以某种方式检索不起作用。我不太确定你是否能够像我在这里所做的那样将图像保存到用户默认值,但这是我能想到的最好的方法,而且我找不到任何以前的 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)
        }
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助其他人在类似的事情上挣扎。

小智 7

斯威夫特 3

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

  • 将您的 UIImage 转换为Data.

    PNG:

  yourDataImagePNG = UIImagePNGRepresentation(yourUIImageHere)
Run Code Online (Sandbox Code Playgroud)

JPEG :

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

我希望有所帮助!