¿Cómo mostrar una imagen mediante una URL?

El error es: "error fatal: inesperadamente encontrado nil mientras desenvolver un valor opcional"

Estoy haciendo lo siguiente en ViewController:

var imageURL:UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    let url = NSURL(string:"http://cdn.businessoffashion.com/site/uploads/2014/09/Karl-Lagerfeld-Self-Portrait-Courtesy.jpg")
    let data = NSData(contentsOfURL:url!)
    if data!= nil {
        imageURL.image = UIImage(data:data!)
    }
}

La verdad es que no entiendo por qué me da error en

imageURL.image = UIImage(data:data!)

cuando ya le he dicho que no proceda si los datos son nulos. No es el problema del enlace. Tampoco hay problema con el "data". He intentado imprimirlo y no era nulo.

Aquí tengo un enfoque desde el que no obtendrá ningún tipo de accidente al descargar la imagen. Ahora actualmente está utilizando el siguiente código:

override func viewDidLoad() {
    super.viewDidLoad()
    let url = NSURL(string:"http://cdn.businessoffashion.com/site/uploads/2014/09/Karl-Lagerfeld-Self-Portrait-Courtesy.jpg")
    let data = NSData(contentsOfURL:url!)
    if data!= nil {
        imageURL.image = UIImage(data:data!)
    }
}

Ahora cambie el código con este, Si usted está continuar con este enfoque:

override func viewDidLoad() {
    super.viewDidLoad()
    let url = NSURL(string:"http://cdn.businessoffashion.com/site/uploads/2014/09/Karl-Lagerfeld-Self-Portrait-Courtesy.jpg")
    let data = NSData(contentsOfURL:url!) 

    // It is the best way to manage nil issue. 
    if data.length > 0 {
        imageURL.image = UIImage(data:data!)
    } else {
        // In this when data is nil or empty then we can assign a placeholder image 
        imageURL.image = UIImage(named: "placeholder.png")
    }
}

Y estoy seguro que si lo usas tu nil crash se solucionará.

Comentarios (1)

Puedes establecer la imagen en la vista de imagen utilizando UIImageView+AFNetworking

Primero arrastra las clases UIImageView+AFNetworking objective c en tu proyecto e importa la clase UIImageView+AFNetworking.h en el archivo de cabecera bridge de tu proyecto. Y utilizar esta línea para establecer la imagen con marcador de posición en imageview. por esto se puede establecer varias imágenes en una vista sin ningún atasco.

yourImageview.setImageWithURL(NSURL(string: self.yourArray.objectAtIndex(indexPath.row).objectForKey("imageurl") as! String), placeholderImage: UIImage(named:"NoUserimage.png"))
Comentarios (0)

Methode

extension UIImage {

/// Loads image asynchronously
///
/// - Parameters:
///   - url: URL of the image to load
///   - callback: What to do with the image

class func loadFromURL(url: NSURL, callback: (UIImage)->()) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {

        let imageData = NSData(contentsOfURL: url)
        if let data = imageData {
            dispatch_async(dispatch_get_main_queue(), {
                if let image = UIImage(data: data) {
                    callback(image)
                }
            })
        }
    })
}

}

**Uso

    let logoUrl = ImageService().buildImageString((self.uiConfig?.headerImage)!, imageMode: .Uniform, size: self.headerImage.frame.size)
    UIImage.loadFromURL(logoUrl, callback: { (image: UIImage) -> () in
        self.headerImage.image = image
    }) 
Comentarios (0)