I've been learning swift rather quickly, and I'm trying to develop an OS X application that downloads images.
I've been able to parse the JSON I'm looking for into an array of URLs as follows:
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 at this point I have my images defined as "image", but what I'm failing to grasp here is how to save these files to my local directory.
Any help on this matter would be greatly appreciated!
Thanks,
tvick47
Open ViewController. swift and create an outlet with name imageView of type UIImageView! , an implicitly unwrapped optional. The idea is simple. The view controller downloads an image from a URL and displays it in its image view.
To write the image data to the Documents directory, we invoke the write(to:) method on the Data object. Because the write(to:) method is throwing, we wrap the method call in a do-catch statement and prefix it with the try keyword.
An object that manages image data in your app.
We ask the FileManager class for the URL of the Documents directory and append the name of the file, landscape. png, to the URL. Writing a Data object to disk is a throwing operation so we wrap it in a do-catch statement. If the operation is successful, we store the URL in the user's defaults database.
In Swift 3:
Write
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 { }
Read
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) }
The following code would write a UIImage
in the Application Documents directory under the filename '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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With