I try to save the picture so that when the application is turned on, the value is saved

var higImage = NSUserDefaults.standardUserDefaults() var higScore = NSUserDefaults.standardUserDefaults() var numberOfImages: NSInteger! var Score: NSInteger! func didMoveToView(view: SKView){ if (Score == 1){ numberOfImages == 1 for var i = 0; i < numberOfImages; i++ { let angle = ((endAngleRad-startAngleRad)/Double(numberOfImages)*Double(i))+startAngleRad var views = UIImageView(image: UIImage(named: "10")) views.frame = CGRectMake(0, 0, 40, 40) views.center = CGPointMake(center.x+CGFloat(R*cos(angle)), center.y+CGFloat(R*sin(angle))) self.view? .addSubview(views) } if (Score == 2){ numberOfImages == 2 for var i = 0; i < numberOfImages; i++ { let angle = ((endAngleRad-startAngleRad)/Double(numberOfImages)*Double(i))+startAngleRad var views = UIImageView(image: UIImage(named: "10")) views.frame = CGRectMake(0, 0, 40, 40) views.center = CGPointMake(center.x+CGFloat(R*cos(angle)), center.y+CGFloat(R*sin(angle))) self.view? .addSubview(views) } if higScore.valueForKey("higScore") != nil{ Score = higScore.valueForKey("higScore") as! NSInteger } if higImage.valueForKey("higImage") != nil{ views = higImage.valueForKey("higImage") as! UIImageView } } 

My Score variable is saved, but the image - the views are not.

  • Something I am trying to format the code, and then two brackets are missing. in particular, where closing for if (Score == 1) {and if (Score == 2) { - Max Mikheyenko
  • But you can see how you save it. and generally remove all this code, show only how to save and how to download. - Max Mikheyenko

3 answers 3

Preservation:

 let myImageView = UIImageView(image: UIImage(named: "coolImage")) let imageData = UIImagePNGRepresentation(myImageView.image!) NSUserDefaults.standardUserDefaults().setObject(imageData, forKey: "image") 

Loading:

 let data:NSData = NSUserDefaults.standardUserDefaults().objectForKey("image") as! NSData let imageView = UIImageView(image: UIImage(data: data)) 

I did not try to compile, it seems to work.

  • Is this an objective? I do not understand what is written there - PRKan
  • yes the same is absolutely languages. corrected the answer - Max Mikheyenko
  • Something I'm stupid. I do not understand how to tie my code. This is for me to create new variables? or can i use mine? - PRKan
  • use your own. you need to take the image where you have it, in my answer it is taken from the UIImageView and saved. when loading the same thing the other way around - take your UIImageView and change in it .image . or add a code to save which you have, then accomplish your goal on copying it to your code - Max Mikheyenko
  • I save it like this: var higImage = NSUserDefaults.standardUserDefaults () var views = UIImageView (image: UIImage (named: "10")) if higImage.valueForKey ("higImage")! = Nil {views = higImage.valueForKey ("higImage" ) as! UIImageView} - PRKan

First, to save in NSUserDefaults it is not necessary to create two identical variables (it is better to take constants at all).

NSUserDefaults is easy to use, but it has a memory limit. In 1 MB on the key, if I'm not mistaken, but I can lie.

To save your image, it is not necessary to save an object of type UIImage . It is necessary to save its date ( NSData ).

To do this, use the following code:

 let image = вашImageView.image! let imgData = UIImagePNGRepresentation(image) 

And then you need to save the constant imgData in NSUserDefaults .

 let defaults = NSUserDefaults.standartDefaults() defaults.setObject(imgData, forKey: "savedImg") defaults.synchronize() 

Now she is in memory. To get it, just use the following lines:

 let imgData = defaults.objectForKey("savedImg") as? NSData 

I used the optional variable type to check for its existence. Here you can use the condition

 if imgData != nil { //она не пустая } else { //она пустая } 

So you will avoid possible departure. When we get the date, we turn it back into a UIImage :

 let image = UIImage(data: imgData) 

Done, I hope helped.

    As for me, the best way

     extension String { func stringByAppendingPathComponent(path: String) -> String { let nsSt = self as NSString return nsSt.stringByAppendingPathComponent(path) } } extension UIImage { static func fileInDocumentsDirectory(filename: String) -> String { return documentsDirectory().stringByAppendingPathComponent(filename) } static func saveImage(image: UIImage, path: String) -> Bool { let pngImageData = UIImagePNGRepresentation(image) let result = pngImageData!.writeToFile(path, atomically: true) return result } static func loadImageFromPath(path: String) -> UIImage? { let image : UIImage? let data = NSData(contentsOfFile: path) if data == nil { return nil } else { image = UIImage(data: data!) } return image } } let path = fileInDocumentsDirectory("nameImage.png") UIImage.saveImage(image, path) //сохранили картинку let loadImage = loadImagFromPath(path) // loadImage - это и будет ваша картинка сохранённая в памяти телефон