He estado aprendiendo swift con bastante rapidez, y estoy tratando de desarrollar un OS X aplicación que descargas de imágenes.

He sido capaz de analizar el JSON que estoy buscando en una matriz de direcciones Url como la siguiente:

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)")
                }
            })
        }
    }
}

Lo que en este punto tengo mis imágenes definidas como «imagen», pero de lo que estoy fallando a entender es cómo guardar estos archivos en mi directorio local.

Cualquier ayuda en este asunto sería muy apreciada!

Gracias,

tvick47

InformationsquelleAutor Tyler | 2014-10-03

4 Comentarios

  1. 26

    El código siguiente iba a escribir un UIImage en los Documentos de la Solicitud de directorio bajo el nombre ‘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)
    • Gracias por la respuesta! Sin embargo, siempre que se intenta construir con ese código me aparece el error: Use of unresolved identifier 'UIImageJPEGRepresentation'
    • Que existe una función en iOS. Aquí está cómo hacerlo usando las Api de Mac en Objective-C. post Swift versión stackoverflow.com/questions/3038820/…
    • Gracias por la actualización! Aunque entiendo un poco más, un swift versión realmente me ayudaría a cabo. Gracias!
    • La cadena no tiene stringByAppendingPathComponent
  2. 38

    En Swift 3:

    Escribir

    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 { }

    Leer

    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)
    }
    • gran respuesta – por favor, considere la posibilidad de añadir información acerca de la eliminación de la imagen
    • Estoy tratando de usar UIImagePNGRepresentation() función, pero Xcode no la reconoce por alguna razón. Estoy usando Swift 4.2.
  3. 17

    En swift 2.0, stringByAppendingPathComponent no está disponible, así que la respuesta cambia un poco. Aquí es lo que he hecho para escribir un UIImage fuera del disco.

    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)
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here