Skip to main content
 首页 » 操作系统

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

2024年01月01日38EasonJim

我正在尝试像这样保存从 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 

希望能帮到你!