2014-10-03 3 views
23

Ich habe schnell schnell gelernt, und ich versuche, eine OS X-Anwendung zu entwickeln, die Bilder herunterlädt.Swift - Bild von URL in lokale Datei schreiben

Ich habe in der Lage, die JSON Ich suche in ein Array von URLs zu analysieren, wie folgt:

func didReceiveAPIResults(results: NSArray) { 
    println(results) 
    for link in results { 
     let stringLink = link as String 
     //Check to make sure that the string is actually pointing to a file 
     if stringLink.lowercaseString.rangeOfString(".jpg") != nil {2 

      //Convert string to url 
      var imgURL: NSURL = NSURL(string: stringLink)! 

      //Download an NSData representation of the image from URL 
      var request: NSURLRequest = NSURLRequest(URL: imgURL) 

      var urlConnection: NSURLConnection = NSURLConnection(request: request, delegate: self)! 
      //Make request to download URL 
      NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: { (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in 
       if !(error? != nil) { 
        //set image to requested resource 
        var image = NSImage(data: data) 

       } else { 
        //If request fails... 
        println("error: \(error.localizedDescription)") 
       } 
      }) 
     } 
    } 
} 

So an diesem Punkt habe ich meine Bilder als „Bild“ definiert, aber was ich Ich verstehe hier nicht, wie ich diese Dateien in meinem lokalen Verzeichnis speichern kann.

Jede Hilfe zu diesem Thema würde sehr geschätzt werden!

Danke,

tvick47

Antwort

24

Der folgende Code ein UIImage in den Anmeldungsunterlagen Verzeichnis unter dem Dateinamen 'filename.jpg'

var image = .... // However you create/get a UIImage 
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
let destinationPath = documentsPath.stringByAppendingPathComponent("filename.jpg") 
UIImageJPEGRepresentation(image,1.0).writeToFile(destinationPath, atomically: true) 
+1

Vielen Dank für die Antwort! Jedes Mal, wenn ich versuche, mit diesem Code zu erstellen, erhalte ich den Fehler: 'Verwendung der unaufgelösten Kennung 'UIImageJPEGRepresentation'' – Tyler

+1

Diese Funktion existiert auf iOS. Hier erfahren Sie, wie Sie Mac-APIs in Objective-C verwenden. Wird Swift Version http://stackoverflow.com/questions/3038820/how-to-save-a-nsimage-as-a-new-file – kurtn718

+1

Vielen Dank für das Update! Obwohl ich ein bisschen weiter verstehe, würde mir eine schnelle Version wirklich helfen. Vielen Dank! – Tyler

17

In swift 2.0 ist stringByAppendingPathComponent nicht verfügbar schreiben würde, Die Antwort ändert sich also ein wenig. Hier ist, was ich getan habe, um eine UIImage auf die Festplatte zu schreiben.

documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first! 
if let image = UIImage(data: someNSDataRepresentingAnImage) { 
    let fileURL = documentsURL.URLByAppendingPathComponent(fileName+".png") 
    if let pngImageData = UIImagePNGRepresentation(image) { 
     pngImageData.writeToURL(fileURL, atomically: false) 
    } 
} 
25

In Swift 3:

schreiben

do { 
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
    let fileURL = documentsURL.appendingPathComponent("\(fileName).png") 
    if let pngImageData = UIImagePNGRepresentation(image) { 
    try pngImageData.write(to: fileURL, options: .atomic) 
    } 
} catch { } 

lesen

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
let filePath = documentsURL.appendingPathComponent("\(fileName).png").path 
if FileManager.default.fileExists(atPath: filePath) { 
    return UIImage(contentsOfFile: filePath) 
} 
+0

große Antwort - bitte beachten Sie, um Informationen über das Löschen von Bildern hinzuzufügen – moonvader