2015-09-29 12 views
9
// 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.come usare writeToFile per salvare l'immagine nella directory del documento?

+1

Qual è il problema con questo codice? –

+0

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

+0

Qual è il percorso dell'immagine? (url?) –

risposta

10

Il problema è che si sta controllando se la cartella non esiste, è necessario verificare 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) 
    } 
} 
+0

Nota: puoi anche usare writeToURL invece di aggiungere .path! –

+0

Sarebbe più utile se nella tua risposta hai spiegato dove si trovava il problema, invece di pubblicare semplicemente il codice. Non ci si può aspettare che i futuri lettori sfogliano tutti i commenti alla domanda, e talvolta i commenti vengono addirittura cancellati. –

+0

@MartinR Ok Aggiungo le informazioni –

1
@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))") 
    } 
} 
+1

dovrebbe dare un nome migliore alla directory varsPath non è un percorso. è un URL –

+0

urlString non è una stringa.dai un'occhiata al naming che ho scelto –

+0

so che non è una stringa, ma il codice "UIImageJPEGRepresentation (self.image, 1.0) !. writeToFile (fileURL, atomically: true)" sta dando l'errore non può convertire nsurl in stringa così dovevo mettere .path! –

20

Questa è la mia risposta per Swift 3, combinando 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") 
} 
+0

Dove viene salvata l'immagine? Poiché ho utilizzato questo codice e il registro "Immagine aggiunta con successo" viene stampato ma non è possibile individuare l'immagine in Foto. –

1

Put l'immagine in un oggetto NSData; scrivere su un file con questa classe è un gioco da ragazzi, e renderà le dimensioni del file più piccole.

A proposito, raccomando NSPurgeableData. Dopo aver salvato l'immagine, è possibile contrassegnare l'oggetto 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.

Problemi correlati