come usare writeToFile per salvare l’immagine nella directory del documento?

// directoryPath is a URL from another VC @IBAction func saveButtonTapped(sender: AnyObject) { let directoryPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL let urlString : NSURL = directoryPath.URLByAppendingPathComponent("Image1.png") print("Image path : \(urlString)") if !NSFileManager.defaultManager().fileExistsAtPath(directoryPath.absoluteString) { UIImageJPEGRepresentation(self.image, 1.0)!.writeToFile(urlString.absoluteString, atomically: true) displayImageAdded.text = "Image Added Successfully" } else { displayImageAdded.text = "Image Not Added" print("image \(image))") } } 

Non ricevo alcun errore ma l’immagine non viene salvata nel documento.

Il problema è che stai controllando se la cartella non esiste, dovresti controllare che il file esista. Inoltre dovresti usare url.path invece di url.absoluteString. Stai anche salvando un’immagine jpeg usando un’estensione di file “png”. Dovresti usare “jpg”.

Modifica / aggiornamento:

Swift 4

 // get the documents directory url let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! // choose a name for your image let fileName = "image.jpg" // create the destination file url to save your image let fileURL = documentsDirectory.appendingPathComponent(fileName) // get your UIImage jpeg data representation and check if the destination file url already exists if let data = UIImageJPEGRepresentation(image, 1.0), !FileManager.default.fileExists(atPath: fileURL.path) { do { // writes the image data to disk try data.write(to: fileURL) print("file saved") } catch { print("error saving file:", error) } } 

Questa è la mia risposta per Swift 3 , che combina le 2 risposte sopra:

 let documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) // create a name for your image let fileURL = documentsDirectoryURL.appendingPathComponent("Savedframe.png") if !FileManager.default.fileExists(atPath: fileURL.path) { do { try UIImagePNGRepresentation(imageView.image!)!.write(to: fileURL) print("Image Added Successfully") } catch { print(error) } } else { print("Image Not Added") } 
 @IBAction func saveButtonTapped(sender: AnyObject) { let directoryPath = try! NSFileManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true) let urlString : NSURL = directoryPath.URLByAppendingPathComponent("Image1.png") print("Image path : \(urlString)") if !NSFileManager.defaultManager().fileExistsAtPath(urlString.path!) { UIImageJPEGRepresentation(self.image, 1.0)!.writeToFile(urlString.path! , atomically: true) displayImageAdded.text = "Image Added Successfully" } else { displayImageAdded.text = "Image Not Added" print("image \(image))") } } 

Metti l’immagine in un object NSData; scrivere su un file con questa class è un gioco da ragazzi, e renderà le dimensioni del file più piccole.

A proposito, raccomando NSPurgeableData. Dopo aver salvato l’immagine, è ansible contrassegnare l’object come purgabile, che manterrà il consumo di memoria. Questo potrebbe essere un problema con la tua app, ma potrebbe essere un altro che stai spiazzando.